Delphi 1
Код определения свойств
Итак вам опять нужно "немного" кода. Вот небольшой примерчик компонента лично для вас и остальных моих читателей. Установите этот компонент в палитру Delphi, бросьте экземпляр на форму, закройте ее и модуль и откройте форму как файл формы, используя в диалоге открытия тип *.dfm. Вы увидите дополнительные свойства 'StringThing' и 'Thing'. Первое - свойство строки, второе - бинарное свойство, фактически запись. Если вы имеете HexEdit (шестнадцатиричный редактор) или что-то аналогичное, взгляните на ваш dfm-файл и вы увидите тэги ваших новых свойств вместе с их именами.
Если TReader/TWriter имеет специфические методы для чтения/записи свойств и вы хотите добавить, например, строку, целое, символ или что-то еще (проверьте описание соответствующих методов TReader в файлах помощи), то в этом случае используйте DefineProperty. В случае сложного объекта используйте DefineBinaryProperty и ваши методы чтения и записи получат TStream вместо TReader/TWriter.
unit PropDemo;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs;
type
TDemoProps = class(TComponent)
private
{ Private declarations }
FStringThing : string ;
FThing : record
i, j, k : integer ;
x, y : real ;
ch : char ;
end ;
procedure ReadStringThing( Reader : TReader ) ;
procedure WriteStringThing( Writer : TWriter ) ;
procedure ReadThing( Stream : TStream ) ;
procedure WriteThing( Stream : TStream ) ;
protected
{ Protected declarations }
procedure DefineProperties(Filer: TFiler); override ;
public
{ Public declarations }
constructor Create( AOwner : TComponent ) ; override ;
published
{ Published declarations }
end;
procedure Register;
implementation
constructor TDemoProps.Create( AOwner : TComponent ) ;
begin
inherited Create( AOwner ) ;
{ создайте любые данные, чтобы было что передать в поток}
FStringThing := 'Всем привет!' ;
with FThing do begin
i := 1 ;
j := 2 ;
k := 3 ;
x := PI ;
y := 180 / PI ;
ch := '?' ;
end ;
end ;
procedure TDemoProps.ReadStringThing( Reader : TReader ) ;
begin
FStringThing := Reader.ReadString ;
end ;
procedure TDemoProps.WriteStringThing( Writer : TWriter ) ;
begin
Writer.WriteString( FStringThing ) ;
end ;
procedure TDemoProps.ReadThing( Stream : TStream ) ;
begin
Stream.ReadBuffer( FThing, sizeof( FThing ) ) ;
end ;
procedure TDemoProps.WriteThing( Stream : TStream ) ;
begin
Stream.WriteBuffer( FThing, sizeof( FThing ) ) ;
end ;
procedure TDemoProps.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties( Filer ) ;
Filer.DefineProperty( 'StringThing', ReadStringThing, WriteStringThing,
FStringThing <> '' ) ;
Filer.DefineBinaryProperty( 'Thing', ReadThing, WriteThing, true ) ;
end ;
procedure Register;
begin
RegisterComponents('Samples', [TDemoProps]);
end;
end.
|
Mike Scott
Mobius Ltd.
[000474]