Демонстрация DefineProperties

Хорошо, создайте на основе опубликованного ниже кода модуль PropDemo.pas и добавьте новый компонент в палитру компонентов. Расположите его на форме и сохраните ее. Затем посмотрите файл DFM каким-либо шестнадцатиричным редактором и проверьте наличие определенных свойств по их именованным тэгам. Вы можете также попробовать закрыть форму и модуль, а затем открыть его с помощью пункта меню File | Open file..., изменив тип файла в выпадающем списке на *.DFM.
Mike Scott
Mobius Ltd.

unit PropDemo;

{ .Mike Scott, CIS 100140,2420. }

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.

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

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

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