Hallo,
ich muß in meinem Projekt das Icon von diversen EXE-Dateien auslesen.
Dafür habe ich mit Google diesen
Beispielcode gefunden.
Da dieses Originalbeispiel bei mir leider nicht läuft, vermutlich weil das Icon mit DestroyIcon zu zeitig freigegeben wird, habe ich zum Testen den Code auf meine Bedürfnisse umgeschrieben.
Delphi-Quellcode:
function LoadIconFromExeFile(fn: String; icon: TIcon): Boolean;
var FileInfo : SHFileInfo;
begin
result := SHGetFileInfo(PChar(fn), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON) <> 0;
if result
then icon.Handle := FileInfo.hIcon;
end;
procedure TForm1.Button3Click(Sender: TObject);
var idx : Integer;
icon : TIcon;
begin
with OpenDialog1 do
if Execute
then begin
icon := TIcon.Create;
try
if LoadIconFromExeFile(Filename, icon)
then begin
idx := ImageList1.AddIcon(icon);
if idx > -1
then ImageList1.GetIcon(idx, Image1.Picture.Icon); // für Testzwecke Icon anzeigen
end;
finally
icon.Free;
// oder
// DestroyIcon(icon.Handle); ????
end;
end;
end;
Der Code funktioniert auch wie gewünscht. Nur bin ich mir nicht im Klaren, wie das Icon wieder freizugeben ist.
In der Hilfe steht:
Zitat:
It is only necessary to call DestroyIcon for icons created with the CreateIconIndirect function.
Aber: Icon wurde ja mit Create erzeugt.
Wie mache ich es richtig?
Gruß Klaus.