1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
procedure Save(AItem : TSpectacle; ADest : TStream);
procedure WriteTop(ATop:TTop;AW:TWriter);
begin
AW.WriteInteger(ATop.x);
AW.WriteString(ATop.y);
end;
Var
w : TWriter;
i : Integer;
begin
w := TWriter.Create(ADest,1024);
Try
w.WriteString(AItem.Nom);
w.WriteString(AItem.Detail);
If Assigned(AItem.Tops) Then
i := High(AItem.Tops) - Low(AItem.Tops) + 1
Else
i := 0;
w.WriteInteger(i);
If ( i > 0 ) Then Begin
For i := Low(AItem.Tops) To High(AItem.Tops) Do
WriteTop(AItem.Tops[i],w);
End;
Finally
w.Free();
End;
end;
procedure Load(Var AItem : TSpectacle; ADest : TStream);
procedure ReadTop(Var ATop:TTop;AR:TReader);
begin
ATop.x := AR.ReadInteger();
ATop.y := AR.ReadString();
end;
Var
r : TReader;
i : Integer;
begin
r := TReader.Create(ADest,1024);
Try
AItem.Nom := r.ReadString();
AItem.Detail := r.ReadString();
i := r.ReadInteger();
SetLength(AItem.Tops,i);
If ( i > 0 ) Then Begin
For i := 0 To Pred(i) Do
ReadTop(AItem.Tops[i],r);
End;
Finally
r.Free();
End;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
s: TMemoryStream;
t,t2 : TSpectacle;
begin
t.Nom := 'XX';
t.Detail := 'YY';
SetLength(T.Tops,2);
With T.Tops[0] Do Begin
x := 1;
y := 'ss'
End;
With T.Tops[1] Do Begin
x := 2;
y := '5522'
End;
s := TMemoryStream.Create();
Try
Save(t,s);
s.Position := 0;
Load(t2,s);
Finally
s.Free();
End;
ShowMessageFmt('nom=%s;'#13'Detail=%s',[t2.Nom,t2.Detail]);
ShowMessageFmt('nbre Tops = %d',[Length(t2.Tops)]);
ShowMessageFmt('x=%d; y=%s',[t2.Tops[0].x,t2.Tops[0].y]);
ShowMessageFmt('x=%d; y=%s',[t2.Tops[1].x,t2.Tops[1].y]);
end; |
Partager