unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
TMiembro = class( TComponent)
private
FAlgo2 : string;
published
property Algo2 : string read FAlgo2 write FAlgo2;
end;
TPrincipal = class( TComponent )
private
FAlgo1 : string;
FMiembro : TMiembro;
protected
procedure DefineProperties( Filer : TFiler ) ; override;
procedure LeeMiembro( Reader : TReader );
procedure EscribeMiembro( Writer : TWriter );
public
constructor Create( aOwner : TComponent ); override;
destructor Destroy; override;
property Miembro : TMiembro read FMiembro write FMiembro;
published
property Algo1 : string read FAlgo1 write FAlgo1;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var P1, P2 : TPrincipal ;
MS : TMemoryStream;
begin
P1 := TPrincipal.Create( nil );
with P1 do
begin
Algo1 := 'JUAN';
Miembro.Algo2 := 'PEDRO';
end;
MS := TMemoryStream.Create;
MS.WriteComponent( P1 ) ;
MS.Position := 0;
P2 := MS.readComponent( nil ) as TPrincipal ;
ShowMessage( P2.Algo1 + ' ' + P2.Miembro.Algo2 );
P1.Free;
P2.Free;
MS.Free;
end;
constructor TPrincipal.Create(aOwner: TComponent);
begin
inherited;
FMiembro := TMiembro.Create( Self );
end;
procedure TPrincipal.DefineProperties(Filer: TFiler);
begin
inherited;
Filer.DefineProperty( 'Miembro', LeeMiembro, EscribeMiembro, FMiembro <> nil );
end;
destructor TPrincipal.Destroy;
begin
FMiembro.Free;
FMiembro := nil;
inherited;
end;
procedure TPrincipal.EscribeMiembro(Writer: TWriter);
begin
Writer.writeComponent( FMiembro );
end;
procedure TPrincipal.LeeMiembro(Reader: TReader);
begin
Reader.ReadComponent( FMiembro );
end;
procedure TForm1.Button2Click(Sender: TObject);
var P1,P2 : TPrincipal;
MS : TMemoryStream;
SS : TStringStream;
begin
P1 := TPrincipal.Create( nil );
P1.Algo1 := 'JUAN';
P1.FMiembro.Algo2 := 'PEDRO';
MS := TMemoryStream.Create;
SS := TStringStream.Create('');
MS.WriteComponent( P1 );
MS.Position := 0;
P2 := MS.ReadComponent( nil ) as TPrincipal;
ShowMessage('Antes del ObjectBinaryToText' + #13 + ' P2 contiene:' + #13+#13+
P2.Algo1 + ' ' + P2.FMiembro.FAlgo2 );
MS.Position := 0;
ObjectBinaryToText( MS, SS );
ShowMessage('Despues del ObjectBinaryToText... pase bien !');
SS.Position := 0;
ShowMessage('Resultado en texto es: ' + #13 + SS.DataString );
MS.Free;
SS.Free;
P1.Free;
P2.Free;
end;
initialization
RegisterClasses( [TPrincipal, TMiembro] );
end.