Итак вам опять нужно "немного" кода. Вот небольшой примерчик компонента лично
для вас и остальных моих читателей. Установите этот компонент в палитру Delphi,
бросьте экземпляр на форму, закройте ее и модуль и откройте форму как файл
формы, используя в диалоге открытия тип *.dfm. Вы увидите дополнительные
свойства 'StringThing' и 'Thing'. Первое - свойство строки, второе - бинарное
свойство, фактически запись. Если вы имеете HexEdit (шестнадцатиричный редактор)
или что-то аналогичное, взгляните на ваш dfm-файл и вы увидите тэги ваших новых
свойств вместе с их именами.
Если TReader/TWriter имеет специфические методы для чтения/записи свойств и
вы хотите добавить, например, строку, целое, символ или что-то еще (проверьте
описание соответствующих методов TReader в файлах помощи), то в этом случае
используйте DefineProperty. В случае сложного объекта используйте
DefineBinaryProperty и ваши методы чтения и записи получат TStream вместо
TReader/TWriter.
unit PropDemo;
interfaceuses
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;
implementationconstructor TDemoProps.Create(AOwner: TComponent);
begininherited Create(AOwner);
{ создайте любые данные, чтобы было что передать в поток}
FStringThing := 'Всем привет!';
with FThing dobegin
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);
begininherited DefineProperties(Filer);
Filer.DefineProperty('StringThing', ReadStringThing, WriteStringThing,
FStringThing <> '');
Filer.DefineBinaryProperty('Thing', ReadThing, WriteThing, true);
end;
procedureRegister;
begin
RegisterComponents('Samples', [TDemoProps]);
end;
end.
В статье описывается пример определения свойств в компоненте Delphi, демонстрируя использование методов DefineProperty и DefineBinaryProperty для чтения и записи сложных данных.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS