Если TReader/TWriter имеет специфические методы для чтения/записи свойств и вы хотите добавить, например, строку, целое, символ или что-то еще (проверьте описание соответствующих методов TReader в файлах помощи), то в этом случае используйте DefineProperty. В случае сложного объекта используйте DefineBinaryProperty и ваши методы чтения и записи получат TStream вместо TReader/TWriter.
-------------------------PROPDEMO.PAS-----------------------------
unit PropDemo; interface usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs; typeTDemoProps = class(TComponent)private{ Private declarations }FStringThing : string ;FThing : recordi, 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 ) ; begininherited Create( AOwner ) ; { создайте любые данные, чтобы было что передать в поток}FStringThing := 'Всем привет!' ;with FThing do begini := 1 ;j := 2 ;k := 3 ;x := PI ;y := 180 / PI ;ch := '?' ;end ;end ; procedure TDemoProps.ReadStringThing( Reader : TReader ) ; beginFStringThing := Reader.ReadString ;end ; procedure TDemoProps.WriteStringThing( Writer : TWriter ) ; beginWriter.WriteString( FStringThing ) ;end ; procedure TDemoProps.ReadThing( Stream : TStream ) ; beginStream.ReadBuffer( FThing, sizeof( FThing ) ) ;end ; procedure TDemoProps.WriteThing( Stream : TStream ) ; beginStream.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 ; procedure Register;beginRegisterComponents('Samples', [TDemoProps]);end; end. |
----------------------------------------------------------------
Mike Scott
Mobius Ltd. [000474]