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