Разработка собственного компонента
Необходимо сделать собственный компонент, который бы отображал данные массива сохраненного в blob-поле.
Все хорошо, до тех пор пока не приходится добавлять переменные в компонент.
Если переменная объявлена в Published, есть у нее Read-Write и она стандартного типа (а стандартных типов в FastReport кот наплакал), то всё ок, в любом другом случае - значения переменных теряются.
Например:
TfrxMyView = class(TfrxView)
private
FSignalLen: Int64;
protected
public
constructor Create(AOwner: TComponent); override;
procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); override;
procedure GetData; override;
class function GetDescription: String; override;
published
property BrushStyle;
property Color;
property DataField;
property DataSet;
property DataSetName;
property Frame;
property SignalLen: Int64 read FSignalLen write FSignalLen default 0;
end;
implementation
{ TfrxMyoSignalView }
constructor TfrxMyView.Create(AOwner: TComponent);
begin
inherited;
FSignalLen := 0;
end;
class function TfrxMyView.GetDescription: String;
begin
Result := 'Мой пример';
end;
procedure TfrxMyView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended);
begin
BeginDraw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY);
DrawBackground;
with Canvas do
begin
Draw(FX + 1, FY + 2, Bmp);
TextOut(FX + 1, FY + 2, PChar(IntToStr(FSignalLen)));
end;
DrawFrame;
end;
procedure TfrxMyView.GetData;
var
DataStream: TMemoryStream;
begin
inherited;
if IsDataField then
begin
DataStream := TMemoryStream.Create;
DataSet.AssignBlobTo(DataField, DataStream);
FSignalLen := DataStream.Size shr 2;
DataStream.Free;
end;
end;
initialization
frxObjects.RegisterObject1(TfrxMyView, nil, '', 'Other', 0, 22);
end.
В GetData FSignalLen попадает и ему присваивается какое-то значение
При прорисовки же FSignalLen всегда = 0
Если поменять тип Int64 на Integer, то всё в порядке
Тоже самое происходит, если свойство просто read, или свойство вовсе не объявлено, а есть только переменная или свойство находится не в Published
Что делать? У меня гора своих типов и многие из них в Published никак не засунуть, да и не всегда мне нужно, чтобы внутренние переменные объекта были на виду.
Все хорошо, до тех пор пока не приходится добавлять переменные в компонент.
Если переменная объявлена в Published, есть у нее Read-Write и она стандартного типа (а стандартных типов в FastReport кот наплакал), то всё ок, в любом другом случае - значения переменных теряются.
Например:
TfrxMyView = class(TfrxView)
private
FSignalLen: Int64;
protected
public
constructor Create(AOwner: TComponent); override;
procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); override;
procedure GetData; override;
class function GetDescription: String; override;
published
property BrushStyle;
property Color;
property DataField;
property DataSet;
property DataSetName;
property Frame;
property SignalLen: Int64 read FSignalLen write FSignalLen default 0;
end;
implementation
{ TfrxMyoSignalView }
constructor TfrxMyView.Create(AOwner: TComponent);
begin
inherited;
FSignalLen := 0;
end;
class function TfrxMyView.GetDescription: String;
begin
Result := 'Мой пример';
end;
procedure TfrxMyView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended);
begin
BeginDraw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY);
DrawBackground;
with Canvas do
begin
Draw(FX + 1, FY + 2, Bmp);
TextOut(FX + 1, FY + 2, PChar(IntToStr(FSignalLen)));
end;
DrawFrame;
end;
procedure TfrxMyView.GetData;
var
DataStream: TMemoryStream;
begin
inherited;
if IsDataField then
begin
DataStream := TMemoryStream.Create;
DataSet.AssignBlobTo(DataField, DataStream);
FSignalLen := DataStream.Size shr 2;
DataStream.Free;
end;
end;
initialization
frxObjects.RegisterObject1(TfrxMyView, nil, '', 'Other', 0, 22);
end.
В GetData FSignalLen попадает и ему присваивается какое-то значение
При прорисовки же FSignalLen всегда = 0
Если поменять тип Int64 на Integer, то всё в порядке
Тоже самое происходит, если свойство просто read, или свойство вовсе не объявлено, а есть только переменная или свойство находится не в Published
Что делать? У меня гора своих типов и многие из них в Published никак не засунуть, да и не всегда мне нужно, чтобы внутренние переменные объекта были на виду.
Комментарии