Home » Tipps & Tricks » Dateien/Verzeichnisse » Dateieigenschaften » Icons aus einer Datei lesen

Icons aus einer Datei lesen

Mit folgender Funktion ist es möglich, Icons aus den Ressourcen einer Datei zu extrahieren. Als ersten Parameter muss der komplette Pfad+Dateiname angegeben werden. Über den Parameter IconNr, können auch weitere Icons innerhalb der ausgewählten Datei ausgelesen werden. Der Index der Icons beginnt bei 0.

uses ShellApi;

function IconFromFile(const Filename: string; IconNr: Word): HICON;
var
  buffer: array[0..2*MAX_PATH]of Char;
begin
  StrPCopy(buffer, Filename);
  Result := ExtractAssociatedIcon(HInstance, buffer, IconNr);
end;

Dieses Beispiel holt sich das Icon eines beliebigen Programmes und speichert es in einer Datei.

procedure TForm1.Button1Click(Sender: TObject);
var
  TempIcon: HICON;
  Icon:TIcon;
begin
  if OpenDialog1.Execute then begin
    //Icon holen
    TempIcon := IconFromFile(OpenDialog1.FileName,0);
    //Prüfen ob gefunden
    if (TempIcon  0) then
    begin
      //In Datei speichern
      Icon:=TIcon.Create;
      try
        Icon.Handle := TempIcon;
        Icon.SaveToFile('c:Merke.ico');
      finally
        Icon.Free;
      end;
    end;
  end;
end;

Mit

Application.Icon.Handle:=TempIcon;

kann das Icon zur Laufzeit auch dem eigenen Programm zugewiesen werden.
Und mit

Paintbox1.Canvas.DrawIconEx(Handle, 0, 0,TempIcon, 16, 16, 0, Brush.Handle, di_Normal);

in eine Paintbox gezeichnet werden.