Советы по Delphi

         

Код определения свойств


Итак вам опять нужно "немного" кода. Вот небольшой примерчик компонента лично для вас и остальных моих читателей. Установите этот компонент в палитру Delphi, бросьте экземпляр на форму, закройте ее и модуль и откройте форму как файл формы, используя в диалоге открытия тип *.dfm. Вы увидите дополнительные свойства 'StringThing' и 'Thing'. Первое - свойство строки, второе - бинарное свойство, фактически запись. Если вы имеете HexEdit (шестнадцатиричный редактор) или что-то аналогичное, взгляните на ваш dfm-файл и вы увидите тэги ваших новых свойств вместе с их именами.

Если TReader/TWriter имеет специфические методы для чтения/записи свойств и вы хотите добавить, например, строку, целое, символ или что-то еще (проверьте описание соответствующих методов TReader в файлах помощи), то в этом случае используйте DefineProperty. В случае сложного объекта используйте DefineBinaryProperty и ваши методы чтения и записи получат TStream вместо TReader/TWriter.

-------------------------PROPDEMO.PAS-----------------------------

    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]



Содержание раздела