schitho - Do 03.07.03 08:39
Titel: SHGetFileInfo; Icons von Laufwerken
Hi,
mit
SHGetFileInfo gelingt es mir nun dank Eurer Hilfe, die Icons und den Dateityp zu den einzelnen Dateien in einem Verzeichnis zu ermitteln und anzuzeigen. :D
Die Anzeige erfolgt in
VirtualTreeView [
http://www.delphi-gems.com/VirtualTreeview/].
Nun möchte ich im Baum nicht nur das Verzeichnis anzeigen lassen, sondern auch alle Laufwerke (ähnlich, wie beim Explorer).
Wie komme ich aber zu die Icons für die Laufwerke und wie kann ich diese in die ImageListe der Dateiicons ergänzen, ohne, dass Windows danach nur noch Schrott anzeigt. (Bei SHGetFileInfo darf man ja die ImageList nicht verändern oder erweitern, weil sonst falsche Icons angezeigt werden). :?:
Moderiert von
Tino: Titel geändert.
schitho - Fr 04.07.03 00:07
Hi,
Die ImageList enthält eh alle benötigten Icons, also auch die der Laufwerke, Desktop, etc. 8)
Hab folgende Lösung gefunden, um den Index für die passenden Icons zu ermitteln:
1.) Die Icons von Laufwerken kann man mit SHGetFileInfo eh ganz einfach anzeigen lassen. Man muss dazu nur statt dem Dateinamen den Laufwerksbuchstaben (z.B. 'C:\') übergeben.
2.) Den Desktop oder den Arbeitsplatz bekommt man so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function GetSpecialIcon(what: integer):integer; var pidl: PItemIDList; shfi: TSHFileInfo; begin SHGetSpecialFolderLocation(Form1.Handle, what, pidl); SHGetFileInfo(PChar(pidl), 0, shfi, SizeOf(shfi), SHGFI_PIDL or SHGFI_DISPLAYNAME or SHGFI_ICON or SHGFI_TYPENAME); result := shfi.iIcon; Form1.StaticText1.Caption := String(shfi.szDisplayName); SHFreeItemIDList(pidl); end; |
Der Aufruf erfolgt dann so:
Delphi-Quelltext
1:
| IconIndex:=GetSpecialIcon(CSIDL_DRIVES); |
für den Arbeitsplatz und so
Delphi-Quelltext
1:
| IconIndex:=GetSpecialIcon(CSIDL_DESKTOP); |
für den Desktop.