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

 

procedureRegister;

 

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;

 

procedureRegister;

begin

RegisterComponents('Samples', [TDemoProps]);

end;

 

end.

 

 

Mike Scott

Mobius Ltd.

 

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

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить