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

Previous  Top  Next

    
 

 

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

 

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

 

Code:

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.

©Drkb::00036

Взято из Советов по Delphi от Валентина Озерова

Сборник Kuliba