diff --git a/packages/rtl/classes.pas b/packages/rtl/classes.pas index 4277005..afcf0de 100644 --- a/packages/rtl/classes.pas +++ b/packages/rtl/classes.pas @@ -272,7 +272,10 @@ type procedure SetLineBreak(const S : String); Function GetSkipLastLineBreak : Boolean; procedure SetSkipLastLineBreak(const AValue : Boolean); + procedure ReadData(Reader: TReader); + procedure WriteData(Writer: TWriter); protected + procedure DefineProperties(Filer: TFiler); override; procedure Error(const Msg: string; Data: Integer); function Get(Index: Integer): string; virtual; abstract; function GetCapacity: Integer; virtual; @@ -2686,6 +2689,44 @@ begin FSkipLastLineBreak:=AValue; end; +procedure TStrings.ReadData(Reader: TReader); +begin + Reader.ReadListBegin; + BeginUpdate; + try + Clear; + while not Reader.EndOfList do + Add(Reader.ReadString); + finally + EndUpdate; + end; + Reader.ReadListEnd; +end; + +procedure TStrings.WriteData(Writer: TWriter); +var + i: Integer; +begin + Writer.WriteListBegin; + for i := 0 to Count - 1 do + Writer.WriteString(Strings[i]); + Writer.WriteListEnd; +end; + +procedure TStrings.DefineProperties(Filer: TFiler); +var + HasData: Boolean; +begin + if Assigned(Filer.Ancestor) then + // Only serialize if string list is different from ancestor + if Filer.Ancestor.InheritsFrom(TStrings) then + HasData := not Equals(TStrings(Filer.Ancestor)) + else + HasData := True + else + HasData := Count > 0; + Filer.DefineProperty('Strings', @ReadData, @WriteData, HasData); +end; function TStrings.GetLBS: TTextLineBreakStyle; begin