Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB4, VB5, VB6 | 27.11.01 |
Eigene "zuletzt geöffnete Dateiliste" realisieren Ab sofort können auch Sie Ihre Anwendung mit einer "RecentFiles"-Liste austatten, welche die x zuletzt geöffneten Dateien anzeigt. | ||
Autor: Dieter Otter | Bewertung: | Views: 25.726 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
MS-Word zeigt sie, Visual Basic zeigt sie und viele anderen Anwendungen auch - eine Liste der zuletzt geöffneten Dateien, und zwar im Menü Datei. Hier werden z.B. immer die vier zuletzt geöffneten Dateien aufgelistet, um so einen schnellen Zugriff auf die letzten Dateien zu bieten.
Auch in der eigenen Anwendung kann eine solche "RecentFiles"-Liste sinnvoll sein, z.B. wenn Sie einen kleinen Texteditor programmiert haben.
Was muss man beachten, wie und wo werden die Dateinamen gespeichert? All das erfahren Sie in unserem heutigen Tipp.
Vorbereitung des Formulars
Öffnen Sie den Menüeditor der Form, in der Sie im Menü die letzten x-Dateien zum schnellen Abruf bereitstellen wollen. Fügen Sie an geeigneter Stelle (am besten ganz zum Schluss, jedoch noch vor dem "Beenden"-Befehl) 4 neue Menüeinträge ein:
- Name = mnuRecent, Index = 1
- Name = mnuRecent, Index = 2
- Name = mnuRecent, Index = 3
- Name = mnuRecent, Index = 4
Nachdem nun das Formular vorbereitet ist und auch klar ist, wie und wo wir die "RecentFiles"-Liste speichern, kann es ans Codieren gehen.
Im Allgemein-Teil der Form legen wir zunächst den Abschnitt der Registry fest, sowie die Anzahl der Dateien, die wir uns "merken" wollen.
Option Explicit ' Abschnitt in der Registry festlegen ' (hier werden die Dateinamen gespeichert) Const RegAppName = "MyApplication" Const RegAppSection = "RecentFiles" ' maximale Anzahl der Dateinamen, die "gemerkt" ' werden sollen Const intMaxFiles = 4
Im Form_Load Ereignis wird das Menü Datei entsprechend aktualisiert, so dass sofort die zuletzt geöffneten Dateien angezeigt werden. Hierbei möchten wir aber nicht den vollständigen Pfad, sondern nur den reinen Dateinamen ausgeben:
Private Sub Form_Load() ' Menü Datei aktualisieren SetMenuRecentFiles End Sub Private Sub SetMenuRecentFiles() ' Liste der zuletzt geöffneten Dateien im Menü ' Datei anzeigen Dim I As Integer Dim intCount As Integer Dim strFilename As String For I = 1 To intMaxFiles ' Dateiname aus Registry lesen strFilename = GetSetting(RegAppName, RegAppSection, _ CStr(I), "") ' Jetzt im Menü anzeigen If strFilename <> "" Then mnuRecent(I).Caption = "&" & CStr(I) & " " & _ Mid$(strFilename, InStrRev(strFilename, "\") + 1) mnuRecent(I).Tag = strFilename mnuRecent(I).Visible = True Else mnuRecent(I).Visible = False End If Next I End Function
Wenn Sie den Code der Prozedur SetMenuRecentFiles genauer anschauen, stellen Sie fest, dass der vollständige Dateiname der Dateien in der Tag-Eigenschaft der Menü-Einträge gespeichert wird. Ja, auch Menüs haben eine Tag-Eigenschaft
Private Sub mnuRecent_Click(Index As Integer) ' Datei öffnen MsgBox "Datei öffnen:" & vbCrLf & mnuRecent(Index).Tag End Sub
Fehlt jetzt eigentlich nur noch der Teil, in welchem die Dateien in die Registry gespeichert werden. Hierzu erstellen wir eine Prozedur, welche Sie jedesmal dann aufrufen, wenn eine neue Datei geöffnet wurde.
Private Sub AddToRecentList(ByVal strFilename As String) ' Eintrag der Liste der zuletzt geöffneten ' Dokumenten hinzufügen Dim I As Integer ReDim arrFiles(intMaxFiles) As String ' Einträge um eine Position versetzt einlesen For I = intMaxFiles - 1 To 1 Step -1 arrFiles(I + 1) = GetSetting(RegAppName, _ RegAppSection, CStr(I), "") Next I ' Erster Eintrag = zuletzt geöffnetes Dokument arrFiles(1) = strFilename ' Alle Einträge wieder speichern For I = 1 To intMaxFiles SaveSetting RegAppName, RegAppSection, _ CStr(I), arrFiles(I) Next I End Sub
Wie gesagt, wird eine neue Datei geöffnet, muss die AddToRecentList-Prozedur aufgerufen werden:
Private Sub cmdOpen_Click() ' Datei öffnen On Local Error Resume Next With CommonDialog1 .CancelError = True .ShowOpen If Err = 0 Then ' Datei der Liste hinzufügen AddToRecentList .FileName ' "Datei"-Menü aktualisieren SetMenuRecentFiles End If End With End Sub
Das war's dann auch schon.
Ab sofort bietet auch Ihre Anwendung eine "RecentFiles"-Liste