Hallo Leute,
ich brauche gerade ein paar Icons (XP-Style) für eine meiner Anwendungen und wollte dabei auf die mit Windows gelieferten zurückgreifen. Nun liegen diese ja nicht als ICO-Files vor, sondern sind in Anwendungen und DLLs eingebettet - man muss sie folglich extrahieren. Ich mache das so:
Code:
uses ShellAPI...
...
function IconFromFile(S : string): TIcon;
var
MyIcon : TIcon;
SHFileInfo: TSHFileInfo;
begin
MyIcon := TIcon.Create;
SHGetFileInfo(pchar(S), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_ICON);
MyIcon.Handle:= SHFileInfo.hIcon;
Result:=MyIcon;
end;
Läd man das von obiger Funktion zurückgegebene Icon in ein Image, z.B.
Code:
Image1.Picture.Icon:=IconFromFile('C:\WINDOWS\system32\sndrec32.exe');
dann erhält man das:
http://www.imgmonkey.com/thumb/9461-icon1.gif (schön)
Nun wäre es unsauber, das Icon zur Laufzeit zu extrahieren und darzustellen. Wer weiß schon ob es die Quelldatei in zukünftigen Windows-Versionen noch gibt oder unter welchem Pfad sie abgelegt ist? Folglich brauche ich das ICO-File.
Speichert man das von obiger Funktion gelieferte Icon
Code:
MyIcon := IconFromFile('C:\WINDOWS\system32\sndrec32.exe');
MyIcon.SaveToFile('C:\icon.ico');
dann sieht das Resultat allerdings so aus:
http://www.imgmonkey.com/thumb/3111-icon2.gif (würg)
Ich habe auch einige Icon Extraktions-Tools ausprobiert und leider scheinen sie ähnliche Ergebnisse zu liefern.
---> Frage: Wie extrahiert man ein Icon richtig (d.h. als 1:1 Kopie)?
Alternativ wäre ich auch dankbar für Hinweise bzgl. Freeware Icon-Sammlungen (XP-Style). Momentan suche ich v.a. Icons aus dem Audio-Bereich (Mikrofone, Lautsprecher etc.).
Danke für Eure Hilfe!