nachdem ich mir diverse Beiträge gestern durchgelesen habe, habe ich folgendes probiert
Laden:
Delphi-Quellcode:
else if typ = 'TStringList' then Begin
dStrings := TStringList.Create;
MemoryStream := TMemoryStream.Create;
MemoryStream.Position := 0;
size := Reader.ReadInteger;
memorystream.SetSize(size);
reader.Read(MemoryStream.Memory^, Size);
MemoryStream.Position := 0;
dstrings.LoadFromStream(MemoryStream);
SetObjectProp(self, PropList^[i].Name, dstrings);
end;
Speichern:
Delphi-Quellcode:
else if typ = 'TStringList' then Begin
MemoryStream := TMemoryStream.Create;
MemoryStream.Position := 0;
sl_temp.SaveToStream(MemoryStream);
MemoryStream.Position := 0;
size := MemoryStream.Size;
writer.WriteInteger(size);
MemoryStream.Position := 0;
Writer.Write(MemoryStream.Memory^, size);
end;
wobei ich heute Deinen Vorschlag die Stringliste direkt beim speichern als Memorystream zu speichern mal testen werde
Delphi-Quellcode:
s := Tstringlist.Create;
s := (GetObjectProp(self, PropList^[i].Name) as tStringList);
zur Zeit erzeuge ich relativ unelegant und nicht in das Konzept passend direkt in der Routine 'TMyObjectlist.savetostream'
Delphi-Quellcode:
for i:=0 to c-1 do begin
// Schreiben des TBaseObjects-Typen-Namen
WriteClassRef(Writer, Items[i]);
// Speichern der gewünschten Informationen
Header := Items[i] as lHeader;
sl_temp := tStringlist.create;
sl_Temp := header.RegistrierNr;
Items[i].SaveToStream(Writer);
sl_temp.Free;
end;
den daraus resultierenden Memorystream speichere ich dann in den Hauptstream
des geht zur Zeit sehr gut