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

Итак вам опять нужно "немного" кода. Вот небольшой примерчик компонента лично для вас и остальных моих читателей. Установите этот компонент в палитру 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.
Взято из Советов по Delphi от Валентина Озерова
Сборник Kuliba

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...