Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Collection das Font einer gekapselten Komponente speichern lassen (https://www.delphipraxis.net/152835-collection-das-font-einer-gekapselten-komponente-speichern-lassen.html)

RSE 8. Jul 2010 16:04


Collection das Font einer gekapselten Komponente speichern lassen
 
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?

uligerhardt 8. Jul 2010 17:05

AW: Collection das Font einer gekapselten Komponente speichern lassen
 
Das
Zitat:

Zitat von RSE (Beitrag 1034323)
Delphi-Quellcode:
  FControl.Font := AValue; // Bauchschmerzen

ruft ja
Delphi-Quellcode:
TControl.SetFont
auf, was wiederum
Delphi-Quellcode:
FFont.Assign(Value)
(und nicht
Delphi-Quellcode:
FFont := Value
) aufruft. Also passiert deinen Zeigern auch nix.

RSE 8. Jul 2010 18:54

AW: Collection das Font einer gekapselten Komponente speichern lassen
 
Hm, da hätt ich natürlich auch mal hinsehen können... Dann kann ich natürlich auch gleich Assign aufrufen, ohne Bauchschmerzen zu bekommen ;-)

Vielen Dank für den Hinweis.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz