2
www.ChF-Online.de  

Einfacher Dateibrowser

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
 Feld-Arbeiten
 Form-Sachen
 Menü-/Symbolleisten
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
aktiv aktiv Fix-und-Fertiges/Projekte
 Aufgaben in OL eintragen
aktiv  Einfacher Dateibrowser
 Formatvorlagen
 Formularfelder sichern
 Formluarfelder formatieren
 Formluarfelder formatieren 2
 Formluarfelder formatieren 3
 Formular-QuickInfos
 Kontextmenü erstellen
 Sicherheitskopien an bel. Orten
 Sicherheitskopien erstellen Word 2007/2010
 ToolTipps ändern
 Dokumenteigenschaften kopieren
 (Jahres-)Kalender erstellen
 Zeichen-Zähler
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
Getestet unter Word2000Getestet unter WordXPGetestet unter Win2000  
VBA-Code verfügbar: ja
Beispiel anzeigen
Makro/Datei speichern
Print

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:
So wird u.a. bei der Navigation durch die Ordnerstruktur ein immer länger werdender Pfad zum aktuellen Verzeichnis erzeugt, vor allem wenn in übergeordnete Ordner zurückgewechselt wird:

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:

  • Auswahl des Startordners
  • Anzeige des aktuellen Ordner-/Dateipfades
  • Anzeige der Datteiattribute (AHSR)
  • Anzeige der Dateigröße
  • Datum des letzten Zugriffs
  • Starten einer Datei mit dem zugewiesenen Programm

Dieses Beispiel stellt keinen vollstädnigen Dateimanager dar, sondern soll eine Grundlage für eigene Erweiterungen liefern!


 Besucher: 0 online  |  0 heute  |  0 diesen Monat  |  2219137 insgesamt | Seitenaufrufe: 81   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  Es ist durchaus denkbar, daß der Krieg der Vater aller Dinge ist - der Vater aller Menschen ist er garantiert nicht.
Werner Schneyder
 powered by phpCMS and PAX