Dateien+Verzeichnisse - Standard-Icons für Dateianzeige verwenden
-
Hallo zusammen,
ich habe da einen speziellen TreeView, welchen ich gerne als Foldertreeview nutzen möchte. Allerdings bietet er nicht die Möglichkeit, die Laufwerke sowie deren Ordner anzuzeigen. Das heisst also, ich muß hier selber "Hand" anlegen und eine entsprechende Routine programmieren.
Weiß jemand, wie man das bewerkstelligen kann und wie ich zu jedem Laufwerk/Ordner auch sein zugehöriges Icon auslesen und anzeigen lassen kann?
Wäre super, wenn mir jemand kurz einen Tipp geben könnte,
Gruß
Udo
[ Dieser Beitrag wurde am 12.03.2003 um 17:34 Uhr von Darkheart editiert. ]
[ Dieser Beitrag wurde am 30.04.2003 um 15:56 Uhr von Jansen editiert. ]
-
'Ne gute Loesung wuerde mich auch interessieren!
Ich machs bisher so:
fuer alle LW- Buchstaben (A-Z)
1. Testen ob Wurzelverz existiert
2. Wenn ja: mit FindFirst/FindNext/FindClose alle Ordner suchen-> in Liste
speichern
Fuer alle Ordner der Liste rekursiv Suche wiederholenJeder gefundene Ordner kommt in den TreeView 'rein.
Interessant waere das mit allen verfuegbaren Netzwerkordnern auf verfuegbaren Rechnern! (mit WNetEnum- Funktionen ist's 'ne Viecherei)
PS:fertige Komponenten dazu gibt's glaub' ich auf 'Torry's Delphi- Page'
[ Dieser Beitrag wurde am 12.03.2003 um 20:46 Uhr von DerAltenburger editiert. ]
-
Hi Altenburger,
bei Torry habe ich schon nachgeschaut. Habe aber leider nix passendes gefunden. Ich habe da zwar ne Lösung, aber die funzt bloß in Delphi. Und zwar handelt es sich hier um den TreeView von Mike Lischke. Besser gesagt um ne Demo (fileexplorer), die man aber auch ganz locker als eigene Komponenten installieren kann. Da kriegt man wenigstens die Laufwerke angezeigt und hat alle gestalterischen Freiheiten des TreeViews. Für die Netzwerk-Ordner gibts nen eigenen VT.
Ums gleich vorweg zu nehmen. Im BCB lassen sich die Kompos aus der Demo aber nicht installieren, sondern nur der normal VT. Zumindest krieg ich hier immer nen Fehler, der mir anzeigt, daß irgendeine Dll nicht eingebunden werden kann.Wenn Du willst, schau mal auf www.lischke-online.de und geh da mal in die Rubrik "VirtualTreeView". Ein echt geniales Teil! Allerdings bietet es in seinem Urzustand keine Unterstützung für die Laufwerke. Ansonsten nutze ich nur noch diesen TreeView.
Gruß
Udo
-
das was du erreichen willst, geht nur per Win-API. mit SHGetFileInfo kannst du dir das icon besorgen, dass du im treeview anzeigen willst.
die folgende funktion liefert den index des icons einer datei (ordner, usw.) aus der systemicon-liste:
int __fastcall GetNodeImage(AnsiString FileName) { SHFILEINFO info; DWORD result = SHGetFileInfo(FileName.c_str(), 0, &info, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_DISPLAYNAME ); if (result != 0) return info.iIcon; else return 0; }
davor musst du allerdings die systemicons auslesen (am besten im konstruktor) und in einer imagelist dem treeview zuweisen...
__fastcall TForm3::TForm3(TComponent* Owner) : TForm(Owner) { SHFILEINFO info; DWORD ImageHandle = SHGetFileInfo("", 0, &info, sizeof(info), SHGFI_SMALLICON | SHGFI_SHELLICONSIZE | SHGFI_SYSICONINDEX); if (ImageHandle != 0) { ImageList1->Handle = ImageHandle; ImageList1->ShareImages = true; } }
ImageList1 weisst du der eigenschaft Images des treeview zu.
p.s. funktioniert auch mit netzlaufwerken (nur nicht mit domains).
[ Dieser Beitrag wurde am 13.03.2003 um 02:38 Uhr von Sunday editiert. ]
-
Ich beschäftige mich auch aktuell mit den netten SystemIcons von Windows. Das Beispiel von Sunday hat mir sehr gut weitergeholfen. Allerdings habe ich noch ein Problem:
in TTreeNode gibt es zwei Eigenschaften: ImageIndex (Icon für den "nichtangewählten Zustand") und SelectedIndex (Icon für den "angewählten Zustand").
Wenn ich nun ein Verzeichnis habe, zu dem es Unterverzeichnisse gibt, so wird im Windows-Explorer ein aufgeklapptes Verzeichnis dargestellt. Wie komme ich an derartige Symbole heran? Mit SHGetFileInfo offenbar nicht. Das Flag SHGFI_SELECTED hilft da leider nicht weiter. Gibt es eine andere Quelle dafür?
-
dafür ist auch SHGFI_OPENICON zuständig.
-
Mensch da hab ich aber wirklich dicke Tomaten auf den Augen gehabt. Ich hab das absolut übersehen. Danke für die Hilfe!