Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TIcon freigeben mit Free oder DestroyIcon (https://www.delphipraxis.net/120846-ticon-freigeben-mit-free-oder-destroyicon.html)

RaSoWa1 17. Sep 2008 18:48


TIcon freigeben mit Free oder DestroyIcon
 
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.

toms 17. Sep 2008 18:58

Re: TIcon freigeben mit Free oder DestroyIcon
 
Zitat:

Zitat von msdn
If SHGetFileInfo returns an icon handle in the hIcon member of the SHFILEINFO structure pointed to by psfi, you are responsible for freeing it with DestroyIcon when you no longer need it.

( :arrow: msdn)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz