![]() |
Bestimmtes Icon aus Shell32.dll laden
Hi,
Ich möchte gerne das 16x16 Ordner-Icon aus der Shell32.dll laden. Gibt es da irgendwo Konstanten, bzw ist die ID immer dieselbe (in jeder Windows Version). Weil ansonsten müsste ich ausprobieren... Gruß Neutral General |
Re: Bestimmtes Icon aus Shell32.dll laden
wie währe es damit, diese dll aus zu quetschen (Gibt passende Tools im netz die Icons aus .dll fischen) und die gewünschten icons dann in
TImageList zu laden? Dann kannst du sie dir von dort aus holen :zwinker: ansonsten muss sich wohl mal jemans von den "Pro"-Usern an dein Problem machen. Denn mit dlls habe ich noch gar nicht gearbeitet... |
Re: Bestimmtes Icon aus Shell32.dll laden
Hi,
Ja das mit der Imagelist war meine erste Idee. Aber die DLL-Varianten ist schöner, weil dann auch immer schön die zur Windows Version passenden Ordner-Icons angezeigt werden würden ;) |
Re: Bestimmtes Icon aus Shell32.dll laden
Zitat:
|
Re: Bestimmtes Icon aus Shell32.dll laden
|
Re: Bestimmtes Icon aus Shell32.dll laden
Zitat:
Naja gut. Und wie schließe ich von dieser Liste auf die ID? Jaa die steht da zwar... aber mal folgendes: Bei meinem Vista hat das erste Icon die ID 6. Das ist dieses "Datei"-Icon. Dann folgen weitere "Datei"-Icons in verschiedenen größen bis einschließlich ID 11. 12 ist dann dieses RTF Icon. Diesem Bild zufolge müsste also das Ordner Icon bei 4*6 = 24 liegen. Tut es aber nicht! Das Ordner Icon was ich suche beginnt bei 32... Mhhh.. Vergiss es.. 4 ist das richtige.. Mein ResHacker hat mich irritiert.. |
Re: Bestimmtes Icon aus Shell32.dll laden
Wie wärs mit SHGetFileInfo()? Das kann man jedenfalls benutzen, um zu Dateierweiterungen das Icon zu bekommen - müsste doch auch mit Verzeichnissen gehen?
Wenn das Problem bis heute Abend noch besteht, was ich nicht denke, kann ich mal nachschauen, wenn ich zuhause bin. Hab das in meinen Programmen so gemacht glaube ich. HTH |
Re: Bestimmtes Icon aus Shell32.dll laden
Ich werfe nur mal dies ein:
![]() Fazit: Wenn's ein Ordner sein soll, kannst du dir das Icon des Ordners (oder eines beliebigen) mit ![]() |
Re: Bestimmtes Icon aus Shell32.dll laden
Zitat:
Gibt ja genug Free-Icons im netz ^^ |
Re: Bestimmtes Icon aus Shell32.dll laden
Zitat:
|
Re: Bestimmtes Icon aus Shell32.dll laden
Zitat:
Deswegen habe ich ursprünglich ja nach irgendwelchen Konstanten gefragt ;) Die Methode mit SHGetFileInfo funktioniert soweit ganz gut :) Die Icons sehen nur nicht.. so schön aus.. Mein Code:
Delphi-Quellcode:
Keine Angst - Das 'C:\Windows' ist nur testweise :mrgreen:
var ico: TIcon;
fi: TSHFILEINFO; len: Cardinal; begin ico := TIcon.Create; try len := SizeOf(TSHFILEINFO); FillChar(fi,len,0); SHGetFileInfo('C:\Windows',0,fi,len,SHGFI_ICON or SHGFI_SMALLICON); ico.Handle := fi.hIcon; imlTreeView.AddIcon(ico); // TImageList finally ico.Free; end; end; |
Re: Bestimmtes Icon aus Shell32.dll laden
Was heißt denn das, sie sehen nicht so schön aus? Fehlt die Transparenz? Falsche Farbtiefe? Unscharf? :)
|
Re: Bestimmtes Icon aus Shell32.dll laden
Zitat:
Es gibt sie aber, imho habe ich sie in der MSDN mal gesehen... Erinnere mich nur gerade nicht mehr an die passenden Suchbegriffe... :gruebel: |
Re: Bestimmtes Icon aus Shell32.dll laden
Es gibt Konstanten für die ganzen MessageBox-Icons und so, aber ich glaube nicht für die Shell. Kann mich natürlich irren.
Zum Thema: Mir fiel gerade noch auf, du könntest bei SHGetFileInfo ja mal SHGFI_ICONLOCATION übergeben, mit den Informationen müsstest du das Icon ja selbst laden können. Vielleicht hast du dann mehr Kontrolle über Auflösung, Farbtiefe und so weiter. |
Re: Bestimmtes Icon aus Shell32.dll laden
Liste der Anhänge anzeigen (Anzahl: 1)
Siehe Anhang.
Edit: Zitat:
|
Re: Bestimmtes Icon aus Shell32.dll laden
Delphi-Quellcode:
Der Aufruf führt glaube ich nicht immer zum Ziel, weil man ja auch Eigene Ordner-Icons (z.B. mit Hilfe des Explorers in den Ordnereigenschaften) setzen kann. Es gibt da noch ein Flag für, SHGFI_USEFILEATTRIBUTES, ich könnte mir vorstellen, dass das für Abhilfe sorgt. Wollte nur drauf hinweisen...
SHGetFileInfo('C:\Windows',0,fi,len,SHGFI_ICON or SHGFI_SMALLICON);
|
Re: Bestimmtes Icon aus Shell32.dll laden
Zitat:
Wenn ich dieses Flag setze, bekomme ich ein falsches Icon. Also im Moment hat diese Methode 2 Nachteile: 1. SHGetFileInfo braucht ziemlich lange! :? 2. Das Icon sieht nicht so schön aus.. wenn noch jemand ne Idee hat wäre das super. |
Re: Bestimmtes Icon aus Shell32.dll laden
Mal zuhause eingewählt, das hier habe ich gefunden. Ich benutze ein TListView, um die Icons anzuzeigen, und die sehen eigentlich alle ganz cremig aus. Vielleicht hilft das noch (obwohl es genau so aussieht wie dein Code...), ansonsten bin ich raus...
Delphi-Quellcode:
unit IconManager;
interface uses Windows, SysUtils, Controls, ShellApi, Generics.Collections, Functions; type TIconManager = class private FDirIndex: Integer; FImages: TImageList; FData: TDictionary<string, Integer>; function FGetIconIndex(Extension: string): Integer; public constructor Create; destructor Destroy; override; property DirIndex: Integer read FDirIndex; property Images: TImageList read FImages; property Icon[Extension: string]: Integer read FGetIconIndex; end; implementation { TIconManager } constructor TIconManager.Create; var SysIL: uint; SFI: TSHFileInfoW; begin FData := TDictionary<string, Integer>.Create(); FImages := TImageList.Create(nil); SysIL := SHGetFileInfoW('', 0, SFI, SizeOf(SFI), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX); if SysIL <> 0 then begin FImages.Handle := SysIL; end; SHGetFileInfoW(PChar(GetSystemDir), 0, SFI, SizeOf(TSHFileInfoW), SHGFI_ICON or SHGFI_SMALLICON); FDirIndex := SFI.iIcon; end; destructor TIconManager.Destroy; begin FImages.Free; FData.Free; inherited; end; function TIconManager.FGetIconIndex(Extension: string): Integer; var SFI: TSHFileInfoW; begin if not FData.ContainsKey(Extension) then begin SHGetFileInfoW(PChar(Extension), 0, SFI, SizeOf(TSHFileInfoW), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES); FData.Add(Extension, SFI.iIcon); end; Result := FData[Extension]; end; end. |
Re: Bestimmtes Icon aus Shell32.dll laden
@wicht: Danke, das hat mir geholfen ;)
|
Re: Bestimmtes Icon aus Shell32.dll laden
Danke für die Rückmeldung :-D
Dann mal ein schönes Wochenende :P ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 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