Einfacher Dateibrowser |
|
|||||||||||||||||||||
In diesem Beispiel soll gezeigt werden, wie sich ein einfacher Dateibrowser realisieren lässt. das größte Problem dabei ist, die Dateien von den Ordnern zu unterscheiden und bei Auswahl eines Ordners in diesen zu wechseln. Dazu werden nacheinander alle Einträge im angegebenen Ordner mit dem Befehl Dir durchlaufen und das Dateiattribut des Eintrages ausgewertet. Zusätzlich existieren in jedem Verzeichnis die beiden Einträge "." und " .." zum erneuten Einlesen der Einträge bzw. zum Wechseln in den übergeordneten Ordner, die berücksichtigt werden müssen. Im nachstehenden Ausschnitt werden Dateinamen im Ordner direkt und Ordner selber mit vorgestelltem "+"-Zeichen in eine Listbox eingetragen. sFileName = Dir(sOpenFolder, vbDirectory) Do While sFileName <> "" ' Schleife beginnen. ' Aktuelles und übergeordnetes Verzeichnis ignorieren. If sFileName = "." Or sFileName = ".." Then lbxFiles.AddItem lbxFiles.List(lbxFiles.ListCount - 1, 0) = sFileName lbxFiles.List(lbxFiles.ListCount - 1, 2) = sFileName Else ' Ordnereinträge auswerten If (GetAttr(sOpenFolder & sFileName) And vbDirectory) = vbDirectory Then lbxFiles.AddItem lbxFiles.List(lbxFiles.ListCount - 1, 0) = "+ " & sFileName lbxFiles.List(lbxFiles.ListCount - 1, 2) = sFileName Else lbxFiles.AddItem lbxFiles.List(lbxFiles.ListCount - 1, 0) = sFileName lbxFiles.List(lbxFiles.ListCount - 1, 2) = sFileName End If iFiles = iFiles + 1 Me.Caption = "Anzahl Dateien: " & iFiles End If sFileName = Dir ' Nächsten Eintrag abrufen. Loop Das Verhalten, wenn auf einen Eintrag (Datei oder Ordner) mit der Maus geklickt wird, wird im MouseUp-Ereignis der Listbox festgelegt. Einfacher wäre auf den ersten Blick dieses Verhalten im Click-Ereignis der Listbox unterzubringen, aber das Click-Ereignis wertet einen Eintrag wohl erst nach Änderung der Markierung erneut aus. So wird ein wiederholtes Wechseln in den übergeordneten Ordner über den Eintrag " .." nicht ausgewertet, wenn nicht zwischendurch ein anderer Eintrag ausgewählt wird. Mit folgendem Code wird der markierte Eintrag ausgewertet, indem obige Routine erneut für den ausgewählten Eintrag durchlaufen wird: Private Sub lbxFiles_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim strFile As String strFile = ReadFolder(lbxFiles.Tag & lbxFiles.List(lbxFiles.ListIndex, 2)) End Sub Prinzipiell erhält man damit ein Gerüst zum Einlesen von Ordnern und Anzeige der Einträge. Allerdings besitzt diese Lösung noch ein paar Schönheitsflecken: C:\Temp\UV1\..\UV2\UUV2\..\Datei.txt Um diese Pfadangaben auf einen direkten Pfad zu kürzen, kann auf das API PathCanonicalize zurückgegriffen werden, das genau diese Pfade auf einen direkten Pfad vom obersten Ordner aus korrigiert. Das bereitgestellte Beispiel umfasst noch folgende Funktionen:
Dieses Beispiel stellt keinen vollstädnigen Dateimanager dar, sondern soll eine Grundlage für eigene Erweiterungen liefern! |
www.chf-online.de/vba/vbpfilebrowser.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |