VB-Homepage Tipp 096

Ablegen der zuletzt genutzten Dateien im Menü

Ein sehr interessanter Tipp für alle, die in Ihrem Projekt in irgendeiner Form mit Dateien arbeiten. Sie können nun Ihren Programmnutzern die selbe Funktionalität bieten, wie Sie es zum Beispiel aus allen Office Programmen kennen. Es geht um das Ablegen der zuletzt genutzten Dateien in der Menüleiste. Von dort können diese Dateien dann ohne Probleme wieder aufgerufen werden. In diesem kleinen Beispiel wird dies an Hand eines primitiven Bildanzeigeprogramms veranschaulicht.
Laden Sie also eine Bitmap Datei zur Anzeige, so wird diese Datei in die Menüleiste aufgenommen und kann von dort wieder aufgerufen werden.
Damit die Informationen auch nach einem erneuten Programmstart wieder zur Verfügung stehen, werden diese in eine Datei Namens Addfile.ini ins Windowsverzeichnis geschrieben. Sie erfahren hier also auch gleich noch etwas über das Bearbeiten von *.ini Dateien.

menulist.mak
MENULIST.FRM
CMDIALOG.VBX
ProjWinSize=91,521,248,215
ProjWinShow=2
IconForm="Form1"
Title="Menüliste der zuletzt genutzten Dateien"
ExeName="MENULIST.EXE"

menulist.frm
VERSION 2.00
Begin Form Form1
BackColor = &H00000000&
Caption = "Hinzufügen der zuletzt genutzten Dateien in die Menüliste"
ClientHeight = 4980
ClientLeft = 1590
ClientTop = 2115
ClientWidth = 7455
Height = 5670
Left = 1530
LinkTopic = "Form1"
ScaleHeight = 4980
ScaleWidth = 7455
Top = 1485
Width = 7575
Begin PictureBox Picture1
BackColor = &H00404040&
ClipControls = 0 'False
Height = 3855
Left = 240
ScaleHeight = 3825
ScaleWidth = 6945
TabIndex = 2
Top = 360
Width = 6975
End
Begin CommonDialog CMDialog1
Left = 0
Top = 120
End
Begin Label Label2
Alignment = 2 'Center
BackStyle = 0 'Transparent
Caption = "Legt im Windows-Verzeichnis Addfile.ini an, um auch bei späterer Programmnutzung die zuletzt benutzten Dateien aufzuschlüsseln."
ForeColor = &H00FFFFFF&
Height = 615
Left = 120
TabIndex = 1
Top = 4320
Width = 7215
End
Begin Label Label1
BackStyle = 0 'Transparent
Caption = "Entdeckt auf Cobb / Inside VB"
ForeColor = &H00000000&
Height = 255
Left = 4440
TabIndex = 0
Top = 120
Width = 2895
End
Begin Menu mnuFile
Caption = "&Datei"
Begin Menu mnuFileOpen
Caption = "&Öffnen"
End
Begin Menu mnuSelect
Index = 0
Visible = 0 'False
End
Begin Menu mnuSelect
Index = 1
Visible = 0 'False
End
Begin Menu mnuSelect
Index = 2
Visible = 0 'False
End
Begin Menu mnuSelect
Index = 3
Visible = 0 'False
End
Begin Menu mnuSelect
Index = 4
Visible = 0 'False
End
Begin Menu mnuSelect
Index = 5
Visible = 0 'False
End
Begin Menu spacer
Caption = "-"
End
Begin Menu mnuFileExit
Caption = "&Ende"
End
End
End
' API Funktionen zum bearbeiten der INI Datei
' Als Ablage der Information, welche Dateien zuletzt genutzt wurden
Declare Function GetPrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
Declare Function WritePrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lplFileName As String) As Integer
Sub Add_mnuSelect (FName As String)
Dim i%, c%
' (Dimensioniert ein Array - wenn mehr angezeigt werden sollen, größer definieren)
ReDim FileArray(6)
' capture the open file name
FileArray(0) = FName
'capture the mnuSelect array elements
For i% = 0 To 5
FileArray(i + 1) = mnuSelect(i%).Caption
Next i%
' Setzt den Eintrag ins Menü
mnuSelect(0).Caption = FileArray(0)
' move array(1) thru (5) to mnuSelect()
'skip if it is the current file
c% = 1
For i% = 1 To 5
If FileArray(i%) <> FileArray(0) Then
mnuSelect(c%).Caption = FileArray(i%)
c% = c% + 1
End If
Next i%
' Macht die Menüeinträge sichtbar
For i% = 0 To 5
If mnuSelect(i%).Caption > "" Then
mnuSelect(i%).Visible = True
End If
Next i%
'Eine interessante Sache, zum Beispiel um Usereingaben zur
'Laufzeit ins Menü aufzunehmen
End Sub
Sub Form_Load ()
For i% = 0 To 5
iSize% = 255
DtaFile$ = Space$(iSize%)
StrLen% = GetPrivateProfileString("AddFile", Str$(i%), "none", DtaFile$, iSize%, "AddFile.ini")
If Left$(DtaFile$, StrLen%) <> "none" Then
mnuSelect(i%).Caption = DtaFile$
mnuSelect(i%).Visible = True
End If
Next i%
End Sub
Sub mnuFileExit_Click ()
For i% = 0 To 5
DtaFile$ = mnuSelect(i%).Caption
If DtaFile$ > "" Then
Result% = WritePrivateProfileString("AddFile", Str$(i%), DtaFile$, "AddFile.ini")
End If
Next i%
End
End Sub
Sub mnuFileOpen_Click ()
'set common dialog filter
CMDialog1.Filter = "BitMaps|*.Bmp|Icons|*.Ico"
'blank out common dialog filename
CMDialog1.Filename = ""
'call common dialog
CMDialog1.Action = 1
' if a filename comes back, capture the filename
' Use the LoadPicture function to load Picture1.Picture
If CMDialog1.Filename <> "" Then
PictureName$ = CMDialog1.Filename
picture1.Picture = LoadPicture(PictureName$)
Call Add_mnuSelect(PictureName$)
End If
End Sub
Sub mnuSelect_Click (index As Integer)
' assign the mnuSelect item to picture Picture
PictureName$ = mnuSelect(index).Caption
' run the procedure
Call Add_mnuSelect(PictureName$)
' load the picture to Picture1
picture1.Picture = LoadPicture(PictureName$)
End Sub

Um den Code zu nutzen, erstellen Sie sich mit einem Editor (ZBsp. Notepad) Dateien, die Sie wie beschrieben benennen und den jeweiligen Code hinein kopieren.
Rufen Sie dann die *.mak Datei aus dem Dateimanager auf oder starten Ihr VB-Programm und öffnen das Projekt.

Tipp-Download

Quelle : Cobbs / Inside VB

Zurück zur Übersichtsseite