* correctly stream TStrings based properties

This commit is contained in:
svenbarth 2021-02-19 15:31:28 +00:00
parent d19e385f71
commit b8155b93cb

View File

@ -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