Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#19

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 25. Sep 2006, 10:10
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!
  Mit Zitat antworten Zitat