Wen ich folgenden Code ausführe und die Schriftart verändere, gibt es bei Programmende ein SIGSEGV.
Weise ich aber den Font dem Label anstelle MyFont zu, gibt es kein SIGSEGV.
Das kann nicht gehen.
Du createst einen Font und weist der FontVariablen (MyFont) nacher den Zeiger des FontDialog.Font zu, womit du keinen Zugriff auf deinen originalen Font mehr hast.
Dafür destroyest du den FontDialog.Font.
Dann muss ich es bei TBitmap wohl auch so machen ?
Nur hier hat es mit der Zeigerzuweisung funktionert, obwohl ich FontBitmap und Font mit Free freigegeben habe.
type
TCanvas = class(...)
private
FLazFont: TFont;
procedure SetLazFont(Value: TFont);
...
published
property Font: TFont read FLazFont write SetLazFont;
...
end;
procedure TCanvas.SetLazFont(Value : TFont);
begin
FLazFont.Assign(Value);
end;
Font ist ein Property des Canvas. Wenn du die Zuweisung "Canvas.Font := IrgendeinFont" in deinen Code schreibst, wird in der Methode "SetLazFont" eigentlich "Canvas.Font.Assign(irgendeinFont)" aufgerufen. In der umgekehrten Richtung dagegen wird nur der Pointer auf die interne Variable FLazFont zugewiesen, hier hättest du das Problem wieder.