Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#25

Re: Funktionsrückgabe freigeben

  Alt 11. Mär 2007, 09:20
Hallo,
Zitat von Guido Eisenbeis:
Nehmen wir das Beispiel von ganz am Anfang und gestalten es der Klarheit wegen noch ein wenig einfacher:

Delphi-Quellcode:
function GetFileIcon(AFileName: string): TIcon;
begin
  Result := TIcon.Create;
  Result.LoadFromFile(AFileName);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Icon aus Exe auslesen und Image zuweisen
  Image1.Picture.Graphic := GetFileIcon('C:\Test.ico');
end;
Wie willst du das mit dem "with try finally free end" lösen? Und bitte, ... BITTE! nicht wieder über irgendwelche Unterobjekte!
Das lässt sich natürlich nicht ohne eine Hilfsvariable erledigen.
Die einzige Möglichkeit wäre hier folgende:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Icon: TIcon;
begin
  // Icon aus Exe auslesen und Image zuweisen
  Icon := GetFileIcon('C:\Test.ico');
  try
    Image1.Picture.Graphic := Icon;
  finally
    Icon.Free;
  end;
end;
Etwas anderes macht ja with auch nicht, nur dass Du auf die Hilfsvariable nicht explizit zugreifen kannst. Das ist übrigens ein großer Nachteil dieses Konstrukts. Chrome hat das besser gelöst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Icon := GetFileIcon('C:\Test.ico') do
  begin
    Image1.Picture.Graphic := Icon;
    Icon.Free;
  end;
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat