 |
| Top-Quellcodes |
|
|
| Rubriken |
|
|
| Kontakt |
|
|
| Suchen |
|
|
|
|
|
Es gehört schon zum Standard eines jeden guten Programms, die zuletzt geöffneten Dateien in einem Menü anzuzeigen.
Dabei spielt es keine Rolle, ob es sich um einen Texteditor, Grafikprogramm, ein SDI- oder MDI-Projekt handelt.
Allerdings ist es nicht ganz so einfach, die Dateien in der richtigen Reihenfolge anzuzeigen. Es sollte ja sinnvollerweise
die zuletzt aufgerufene Datei an erster Stelle stehen...
Hier erst einmal ein Screenshot:

|
Beginnen wir beim Ereignis Form_Load:
Private Sub Form_Load()
Dim i As Integer
Dim menuEintrag As String
'Eintragen der Menüaufschriften, die in der Registry gespeichert sind
For i = 3 To 0 Step -1 'rückwärts
menuEintrag = GetSetting(AppTtl, "FileList", "File" & CStr(i), "")
If menuEintrag <> "" Then
Einfuegen menuEintrag
End If
Next i
End Sub
In einer Schleife (und zwar rückwärts) werden die Einträge aus der Registry geholt. Der Einfachheit halber mit der
VB-Funktion "GetSetting".
Dann wird die Unterroutine "Einfuegen(Parameter)" aufgerufen:
Einfuegen menuEintrag
|
Im Ereignis Unload müssen wir natürlich die einzelnen Menüpunkte speichern. Dazu dient die Funktion
SaveSetting.
Private Sub Form_Unload(Cancel As Integer)
' Speichern der einzelnen Menüpunkte (mnuDateiliste(index))
Dim i As Integer
For i = 0 To 3
SaveSetting AppTtl, "FileList", "File" & CStr(i), Me.mnuDateiliste(i).Caption
Next i
End Sub
|
Bevor aber die Ereignisse Form_Load und Form_Unload ausgelöst werden können, müssen die einzelnen Menüpunkte erstellt werden.
Rufen Sie den MenüEditor von Visual Basic auf und erstellen Sie vier unsichtbare Menüpunkte sowie eine ebenfalls unsichtbare Linie:

Geben Sie die gewünschten Menüpunkte ein.
Dort wo die einzelnen Menüeinträge der zuletzt benutzten Dateien aufscheinen sollen, erstellen Sie folgende Einträge:

Nach den üblichen Einträgen wie Neu, Öffnen, Speichern und sonstiges...
1) Einen ganz normalen Trennstrich Caption= "-"
2) Einen Eintrag Name = "mnuDateiliste", Index = "0", Visible = "False / unchecked", Caption = ""
3) Verfahren Sie mit drei weiteren Einträgen auf die gleiche Weise, Index wird immer um eins erhöht
Zum Schluß noch eine Linie, Caption = "-", Name = "mnuLinie", Visible = "False / unchecked"
Ob nun ein Menüeintrag sichtbar wird oder nicht, wird später im Quellcode eingestellt.
|
Durch die Menüpunkte "Öffnen" und / oder "Speichern" wird die jeweilige Datei (Dateipfad und Name) dem Menü hinzugefügt.
Mit einem Klick auf den Menüpunkt soll diese Datei nun wieder aufgerufen werden:
Sub mnuDateiliste_Click(Index As Integer)
Dim dName As String
dName = Me.mnuDateiliste(Index).Caption
Einfuegen dName 'wieder an oberste Stelle
mName = dName
currentfile = dName
' Textdatei öffnen, dient nur als Beispiel...
Open dName For Input As #1
Text1.Text = Input(LOF(1), #1)
Close #1
End Sub
Mit Einfuegen dName wird wieder unsere Unterroutine aufgerufen, um den angeklickten Menüpunkt an die oberste Stelle zu bringen.
|
Kommen wir zu unserer "Unterroutine", die eigentlich den Hauptpart übernommen hat:
Sub Einfuegen(ByVal DateiName As String, Optional ByVal NeuerName)
' Kleine Unterroutine für das Einfügen der Dateipfade + -namen
' als Menübeschriftung
Dim i As Integer
Dim J As Integer
If IsMissing(NeuerName) = True Then
NeuerName = DateiName
Else
If Len(NeuerName) < 5 Then NeuerName = DateiName
End If
For i = 0 To 3
If Me.mnuDateiliste(i).Caption = DateiName Then
For J = i To 1 Step -1
Me.mnuDateiliste(J).Caption = _
Me.mnuDateiliste(J - 1).Caption
Next J
Me.mnuDateiliste(0).Caption = NeuerName
DateiListe_Sichtbar
Exit Sub
End If
Next i
'I = 0
For i = 3 To 1 Step -1
Me.mnuDateiliste(i).Caption = _
Me.mnuDateiliste(i - 1).Caption
Next i
Me.mnuDateiliste(0).Caption = NeuerName
DateiListe_Sichtbar
End Sub
Erläuterungen:
Diese Funktion erledigt im Prinzip das Sortieren der einzelnen Menüeinträge.
Mit DateiListe_Sichtbar wird eine kleine Funktion aufgerufen, die die Menüeinträge auf "visible" stellt:
Sub DateiListe_Sichtbar()
' Unterroutine: Menüpunkte visible ?
Dim i As Integer
For i = 0 To 3
If Me.mnuDateiliste(i).Caption <> "" Then
Me.mnuDateiliste(i).Visible = True
Me.mnuLinie.Visible = True
End If
Next i
End Sub
|
Das hier vorgestellte Beispielprojekt können Sie ohne großen
Aufwand in andere Projekte einbinden.
Möglich und vorstellbar ist natürlich auch, dass die einzelnen Menüeinträge in einer Textdatei oder *.ini gespeichert werden. Und natürlich können Sie auch in einem eigenen Registryschlüssel
speichern.
Hier wurde der Einfachheit halber Getsetting und SaveSetting verwendet. Die gespeicherten Werte finden sich in der Registry unter
HKEY_CURRENT_USER/Software/VB and VBA Programs/Anwendungstitel.
Sozusagen als Draufgabe finden Sie in diesem Projekt auch API-Funktionen für einen Öffnen- und Speicherndialog, ohne das COMCTL.OCX einbinden zu müssen.
Beispielprojekt als Download (4,97 KB)
|
|