Um das Problem nochmals aufzugreifen (ich stehe nämlich vor selbigen):
Delphi-Quellcode:
function Font_GetFontFromUser(_Font: TFont): TFont;
var
FD: TMyFontDialog;
begin
Result := NIL;
FD := TMyFontDialog.Create(NIL);
try
FD.Font := _Font;
if FD.Execute then begin
Result := FD.Font;
end;
finally
FreeAndNil(FD);
end;
end;
Ich habe eine globale Variable vom Typ TFont die ich beim Aufrufen dieser Funktion übergebe und auch wieder zuweise, also in der Form
FfntBla := Font_GetFontFromUser(FfntBla);
Aber kurze Zeit (nicht direkt!) nachdem ich diese Funktion aufgerufen habe, sind die Werte von FfntBla.Name, FfntBla.Size etc. in der "Liste überwachter Ausdrücke" ungültig. Vermutete Ursache ist -wie hier schon angesprochen-, dass mit FreeAndNil auch meine globale Schrift freigegeben wird.
Als Abhilfe hatte ich folgendes angedacht:
Delphi-Quellcode:
function Font_GetFontFromUser(_Font: TFont): TFont;
var
FD: TMyFontDialog;
DummyFont: TFont;
begin
Result := NIL;
FD := TMyFontDialog.Create(NIL);
try
DummyFont := FD.Font
FD.Font := _Font;
if FD.Execute then begin
Result := FD.Font;
end;
FD.Font := DummyFont;
finally
FreeAndNil(FD);
end;
end;
Leider besteht dummerweise das Problem und die globale Variable wird freigegeben, obwohl das afaik nicht sein durfte!
Vielen Dank für schnelle Antworten!