Einzelnen Beitrag anzeigen

RaSoWa1

Registriert seit: 1. Jun 2006
Ort: Halle/Saale
140 Beiträge
 
Delphi 2010 Professional
 
#1

TIcon freigeben mit Free oder DestroyIcon

  Alt 17. Sep 2008, 18:48
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.
Klaus
  Mit Zitat antworten Zitat