Autor Beitrag
schitho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 288

XP Home SP2
D2005 Prof
BeitragVerfasst: Do 03.07.03 08:39 
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.

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 user profile iconTino: Titel geändert.

_________________
(Sorry! Leider ewiger Delphi-Neuling)
schitho Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 288

XP Home SP2
D2005 Prof
BeitragVerfasst: 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:

ausblenden 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:

ausblenden Delphi-Quelltext
1:
IconIndex:=GetSpecialIcon(CSIDL_DRIVES);					


für den Arbeitsplatz und so

ausblenden Delphi-Quelltext
1:
IconIndex:=GetSpecialIcon(CSIDL_DESKTOP);					


für den Desktop.

_________________
(Sorry! Leider ewiger Delphi-Neuling)