Hallo!
ich habe folgendes CollectionItem, welches die Font eines gekapselten Controls im
DFM speichert:
Delphi-Quellcode:
TMyItem =
class(TCollectionItem)
private
FControl: TControl;
protected
function GetFont: TFont;
procedure SetFont(AValue: TFont);
// Bauchschmerzen
published
Font: TFont
read Getfont
write SetFont;
// ohne Setter (SetFont) wird nichts im DFM gespeichert
end;
function TMyItem.GetFont: TFont;
begin
Result := FControl.Font;
end;
procedure TMyItem.SetFont(AValue: TFont);
begin
FControl.Font := AValue;
// Bauchschmerzen
// FControl.Font.Assign(AValue); // auch Bauchschmerzen
end;
Anfangs hatte ich Font als readonly deklariert. Der Zeiger auf die Font-Instanz braucht ja nicht geschrieben zu werden. Nur TCollection scheint readonly-Eigenschaften nicht im
DFM zu speichern. Wenn ich FControl.Font mit einem Zeiger auf eine neue Instanz überschreibe, geht der Zeiger auf die alte Instanz verloren und vielleicht passieren neben dem Speicherleck noch mehr und unschönere Dinge. Wenn ich die neue Value nur assigne, wird evtl. anschließend der Zeiger auf die neue Instanz weggeschmissen, im Glauben diesen ja gerade in TMyItem.Font gesichert zu haben. Ich habe keine Ahnung, wie das Streaming an dieser Stelle vorgeht.
Wie ist das richtige Vorgehen?
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."