TShellListView + TShellComboBox +
TShellTreeView
Grundlegendes
Die TshellListView und die
TshellComboBox, sowie auch die TShellTreeView sind, sich
ergänzende Komponenten um Dateien und deren
Verzeichnisstrukturen anzuzeigen. Jede Komponente für sich
betrachte, ist zwar alleine auch funktionsfähig, jedoch macht es
Sinn zu einer TShellListView mindestens eine TShellComboBox oder
gleich eine TShellTreeView zu setzten.
Verlinkung der Komponenten:
Damit die einzelnen Komponenten
auch aufeinander reagieren, müssen sie im
Objektinspektor/Ereignisse bei Linkage miteinander
Verknüpft werden. z.B.: Bei der TShellListView1, dort bei
TShellComboBox, beispielsweise die TShellCombobox1 angeben...
Setzen des Root-Verzeichnisses
Damit die Komponenten wissen, von
wo ausgehend sie navigiert werden sollen, muss man im
Objektinspektor/Eigenschaften bei Root ein Verzeichnis
angeben z.B.
C:\ (für alle
Komponenten), wenn man vom Arbeitsplatz aus starten möchte dann
rfMyComputer eintragen.
Hat man dies erledigt, so kann
man sich mittels diesen Komponenten bereits, wie beim Windows
Explorer durch die Verzeichnisse klicken.
Pfad bzw. Dateipfad auslesen
(
var Pfad:
String;)
| |
// mit ShellListView
Pfad :=
ShellListView1.Folders[ShellListView1.ItemIndex].PathName;
// Dateipfad
// mit ShellTreeView
Pfad :=
ShellTreeView1.SelectedFolder.PathName;
// nur Pfad |
TShellTreeView aktualisieren (komplett über
Root-Node -> Item[0])
| |
ShellTreeView1.Refresh(ShellTreeView1.Items[0]); |
Aktuelles Verzeichnis von TShellComboBox auslesen
(
var Pfad:
String;)
| |
Pfad := ShellComboBox1.Path |
Verzeichnis während der Laufzeit setzen:
| |
ShellListView1.Path := ('C:\'); |
Root-Verzeichnis setzten - Die
ShellListView enthält nur die Struktur die sich hinter dem
angegebenen Verzeichnis befindet
| |
ShellListView1.Root := ('C:\'); |
Wenn die ShellListView1 z.B. mit der
ShellComboBox1 verknüpft ist, so wird die ShellComboBox1 auch
den neu gesetzten Pfad anzeigen.
Filter auf TShellListView anwenden
Möchte man in der ShellListView nur Dateien eines bestimmten
Typs anzeigen, so bedient man sich dem OnAddFolder
Ereignis. Also im Objektinspektor/Ereignisse hinter
OnAddFolder folgenden Quellcode hinterlegen.
| |
var
einfuegen: Boolean;
begin
einfuegen := false;
if Pos('.jpg',
AnsiLowerCase(AFolder.DisplayName)) >
0
then einfuegen := true;
if Pos('.gif',
AnsiLowerCase(AFolder.DisplayName)) >
0
then einfuegen := true;
if Pos('.bmp',
AnsiLowerCase(AFolder.DisplayName)) >
0
then einfuegen := true;
if Pos('.',
AnsiLowerCase(AFolder.DisplayName)) =
0
then einfuegen := true;
// damit auch Ordner angezeigt werden
if einfuegen = false
then CanAdd := false;
end; |
UpFolder-Button
(eine Ebene höher springen) für TShellListView
Das Beispiel bezieht sich auf die ShellListView1 in Kombination
mit ShellComboBox1. Dazu einen Button auf das Form ziehen und
hinter OnClick folgenden Code hinterlegen:
| |
var
Pfad: String;
begin
if ShellComboBox1.Path =
('Arbeitsplatz')
then exit;
// Arbeitsplatz ist Sprachenabhängig (siehe Text unten)
Pfad := ShellComboBox1.Path;
ShellListView1.Root := Pfad;
if pos('\',Pfad)
=
0
then begin
ShellListView1.Root := ('rfMyComputer');
exit;
end;
if length(Pfad) =
3
then begin
ShellListView1.Root := ('rfMyComputer');
exit;
end;
repeat
Pfad := copy(Pfad,0,length(Pfad)-1);
until
copy(Pfad,length(Pfad),length(Pfad)) = ('\');
Pfad := copy(Pfad,0,length(Pfad)-1);
if
copy(Pfad,length(Pfad),length(Pfad)) = (':')
then
begin Pfad := Pfad + ('\');
ShellListView1.Root := Pfad; exit;
end;
if DirectoryExists(Pfad)
= false
then
begin ShellListView1.Root
:= ('rfMyComputer');
exit;
end
else ShellListView1.Root := Pfad;
end; |
Gelangt man bei der Navigation bis
zur Root des entsprechenden Laufwerks, so wird beim nächsten
Klick auf den UpFolder-Button der Arbeitsplatz angezeigt. Bei
einem weiteren Klick soll nichts passieren, hierfür ist vierte
Zeile im Quellcode verantwortlich. Leider funktioniert das so
nur bei Rechnern mit deutschsprachigem Windows. Soll es auch mit
anderssprachigen Windowsversionen funktionieren, so muss man die
Bezeichnung des Arbeitsplatzes für die entsprechende Sprache
ermitteln.
Hierfür gibt es ein recht simples Verfahren. Als erstes setzt
man bei allen verlinkten Shell-Komponenten, im
Objektinspektor/Eigenschaften Root auf
rfMyComputer.
Dann deklariert man eine
globale Variable namens Arbeitsplatz (siehe
hier). Zum Schluss fügt man, für das Form, auf dem sich die
ShellComboBox1 befindet, im Objektinspektor/Ereignisse bei
OnCreate folgenden Code hinzu:
|
|
Arbeitsplatz
:= ShellComboBox1.Path; |
Damit wird der Name von
Arbeitsplatz, gleich wie er auch immer in den einzelnen Sprachen
benannt wird, in die Variable Arbeitsplatz geschrieben und kann
somit in dem oben gezeigten Quellcode benutzt werden.
Dementsprechend wäre dann die Zeile 4 in:
| |
if ShellComboBox1.Path =
(Arbeitsplatz)
then
exit; |
zu ändern.
|