Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Extraktion von Icons (https://www.delphipraxis.net/68649-extraktion-von-icons.html)

Vroomfondel 3. Mai 2006 10:53


Extraktion von Icons
 
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!

Luckie 3. Mai 2006 10:56

Re: Extraktion von Icons
 
Die Farbtiefe scheint nicht zu stimmen.

Desweiteren darfst du keine Windows Icons extrahieren und mit deiner Anwendung ausliefern, da du damit eine Urheberrechtsverletzung begehst.

OregonGhost 3. Mai 2006 11:37

Re: Extraktion von Icons
 
Ich hab mich in letzter Zeit etwas nach freien Icon-Sammlungen umgeschaut, leider gibt es nicht wirklich viele kostenlose (man muss schon so 99-129$ rechnen für was vernünftiges), aber ein paar hab ich doch gefunden.
Einerseits bekommst du nämlich für die kostenlose Registrierung von Visual C# Express ein Icon-Pack. Nichts großes zwar, aber für den Anfang ganz ok.
16x16-Icons: http://www.famfamfam.com/lab/icons/silk/
http://www.quadrone.org/graphics/

Ansonsten, insbesondere wenn du ganz bestimmte Icons brauchst, sind deine Chancen am besten, dir dafür die entsprechenden Bilder herauszusuchen und mit einem Icon-Editor in ein Windows-Icon umzuwandeln. deviantART könnte da eine interessante Adresse sein.

Luckie 3. Mai 2006 12:11

Re: Extraktion von Icons
 
Die Silk Icons sind sehr brauchbar. :thumb:

Dj_Base 3. Mai 2006 12:16

Re: Extraktion von Icons
 
www.everaldo.com
www.iconaholic.com
www.kde-look.org
www.deviantart.com
www.glyfx.net

:thumb:

Hatten wir aber auch schon ziemlich oft im Forum...
Auch Google spuckt diese Seiten ziemlich früh aus...

mfg,
Dj_Base

Zacherl 3. Mai 2006 12:36

Re: Extraktion von Icons
 
Hi
Zwei Sachen:

1.: Man darf die Windows Icons nicht direkt einbinden
2.: Der Verlust der Farbtiefe kommt von der TIcon Klasse, die nur mit 16 Bit Farben umgehen kann. Es gibt aber extra Units, die Icons mit 32 Bit speichern können. Z.B. die Unit IconsToFile.

Florian

ichbins 3. Mai 2006 12:59

Re: Extraktion von Icons
 
Zitat:

Zitat von Florian Bernd
1.: Man darf die Windows Icons nicht direkt einbinden

Ich hab (hier?) schon mehrfach gelesen, dass man xp-Icons zwar zur Laufzeit einbinden darf, aber nicht bei der Anwendung mitliefern darf (weil sonst die bööösen Linux-User kommen und die Icons extrahieren und selbst verwenden ;))


es gibt aber sowieso Icons die viel schöner sind als die xp-Icons.

Zacherl 3. Mai 2006 13:28

Re: Extraktion von Icons
 
Ich meinte ja, dass man die Icons nicht extrahieren darf und dann z.B. in einer ImageList mitliefert. Erlaubt ist das Extrahieren in den Speicher (also beispielsweise in ein TIcon) ohne Speichern des Icons.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.

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