Ich denke, es ist ganz offensichtlich, dass der Record TTextBaustein einige Methoden braucht und deshalb in eine Klasse umgewandelt werden sollte.
Es bei einem Record zu belassen wäre unprofesionell.
Delphi-Quellcode:
type
TTextBauStein = class(TPersistent)
public
ID : integer; // ID des Textbausteins
fText : TStringList; // Text aus RichEdit
construtor Create;
destructor Destroy;override;
procedure LoadFromStream(stream:TStream);
procedure SaveToStream(stream:TStream);
end;
Durch den Konstruktor und Destruktor übernimmt die Klasse die Verwantwortung ("Ownership") über die Stringliste.
Dies vereinfacht die Arbeit mit TTextBaustein.
Statt in TList werden die TTextBaustein-Objekte in einer TObjectList gehalten.
Die Daten werden mit der Technik gespeichert, die Astat im vorherigen Beitrag beschrieben hat:
Delphi-Quellcode:
procedure TTextBauStein.SaveToStream(stream:TStream);
var
s : string;
len : integer;
begin
Assert(Assigned(stream));
stream.WriteBuffer(ID, sizeof(ID));
s := fText.Text;
len := Length(s);
//-- Länge in Stream speichern
stream.WriteBuffer(len, sizeof(len));
//-- TStringList Daten speichern
stream.WriteBuffer(s[1], len);
end;
Man sieht sehr schön, wie die Anwendung von Objektorientierung den Sourcecode vereinfacht.