Демонстрация DefineProperties
...да, да, опубликуй это, пожалуйста, снова!
Хорошо, создайте на основе опубликованного ниже кода модуль PropDemo.pas и добавьте новый компонент в палитру компонентов. Расположите его на форме и сохраните ее. Затем посмотрите файл DFM каким-либо шестнадцатиричным редактором и проверьте наличие определенных свойств по их именнованным тэгам. Вы можете также попробовать закрыть форму и модуль, а затем открыть его с помощью пункта меню File | Open file..., изменив тип файла в выпадающем списке на *.DFM.
Удачи!
Mike Scott
Mobius Ltd.
unit PropDemo;
{ Демонстрация DefineProperties.
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.
|
[000543]