Just recently opened filkes added to the menu preseved in prefs file between sessions. As demo prgramme on how to use.
Code: Select all
Global Window_0,MainMenu.i
;Declare List To Hold Recent Filenames
Global NewList RecentFiles.s()
;Add recentfiles To the menu Enumeration
Enumeration FormMenu
#mnuOpen
#mnuRecentFiles
#mnuRecentFile01
#mnuRecentFile02
#mnuRecentFile03
#mnuRecentFile04
#mnuExit
EndEnumeration
Procedure WriteRecentFileList()
Define iLoop.i
If OpenPreferences(GetCurrentDirectory() + "MyApp") = 0
CreatePreferences(GetCurrentDirectory() + "MyApp")
PreferenceGroup("RecentFiles")
ClosePreferences()
Else
PreferenceGroup("RecentFiles")
iLoop = 1
;Delete Old Group and Values
RemovePreferenceGroup("RecentFiles")
PreferenceGroup("RecentFiles")
ForEach (RecentFiles())
WritePreferenceString("RecentFile" + Str(iLoop), RecentFiles())
iLoop = iLoop + 1
Next
ClosePreferences()
EndIf
EndProcedure
Procedure SetMenus()
;Separate procefure to add the menu to the application
Define iLoop.i
If IsMenu(MainMenu)
FreeMenu(MainMenu)
EndIf
MainMenu = CreateMenu(#PB_Any, WindowID(Window_0))
MenuTitle("Files")
MenuItem(#mnuOpen,"Open")
;Add Recent file list entries to menu If There are any
If ListSize(RecentFiles()) > 0
OpenSubMenu("Recent Files")
FirstElement(RecentFiles())
MenuItem(#mnuRecentFile01, RecentFiles())
If NextElement(RecentFiles())
MenuItem(#mnuRecentFile02, RecentFiles())
EndIf
If NextElement(RecentFiles())
MenuItem(#mnuRecentFile03, RecentFiles())
EndIf
If NextElement(RecentFiles())
MenuItem(#mnuRecentFile04, RecentFiles())
EndIf
CloseSubMenu()
Else
;No recent files so add place holder and disable
MenuItem(#mnuRecentFiles,"Recent Files")
DisableMenuItem(MainMenu, #mnuRecentFiles, #True)
EndIf
MenuItem(#mnuExit,"Exit")
EndProcedure
Procedure AddRecentFile(FileName.s)
MaxFiles = 4
;Check for and remove duplicate entries
ForEach recentfiles()
If FileName = RecentFiles()
DeleteElement(Recentfiles())
EndIf
Next
;;Add this new entry at the start of the list
FirstElement(Recentfiles())
InsertElement(Recentfiles())
RecentFiles() = FileName
;Remove last entry if required
If ListSize(RecentFiles()) > MaxFiles
LastElement(Recentfiles())
DeleteElement(Recentfiles())
EndIf
EndProcedure
Procedure ReadRecentFileList()
Define PrefRet.s
If OpenPreferences(GetCurrentDirectory() + "MyApp") = 0
CreatePreferences(GetCurrentDirectory() + "MyApp")
PreferenceGroup("RecentFiles")
ClosePreferences()
Else
PreferenceGroup("RecentFiles")
PrefRet = ReadPreferenceString("RecentFile4", "Empty")
If PrefRet <> "Empty"
AddRecentFile(PrefRet)
EndIf
PrefRet = ReadPreferenceString("RecentFile3", "Empty")
If PrefRet <> "Empty"
AddRecentFile(PrefRet)
EndIf
PrefRet = ReadPreferenceString("RecentFile2", "Empty")
If PrefRet <> "Empty"
AddRecentFile(PrefRet)
EndIf
PrefRet = ReadPreferenceString("RecentFile1", "Empty")
If PrefRet <> "Empty"
AddRecentFile(PrefRet)
EndIf
EndIf
EndProcedure
Procedure.s ChooseFile()
Define FileName.s
Filename = OpenFileRequester("Please choose file to load", "C:\", "All Files (*.*)|*.*;", 0)
If Filename
AddRecentfile(Filename)
ProcedureReturn FileName
Else
ProcedureReturn ""
EndIf
EndProcedure
Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ReadRecentFileList()
Setmenus()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
WriteRecentFileList()
End
Case #PB_Event_Menu
Select EventMenu()
Case #mnuOpen
ChooseFile()
Case #mnuRecentFile01
Debug GetMenuItemText(MainMenu, #mnuRecentFile01)
Case #mnuRecentFile02
Debug GetMenuItemText(MainMenu, #mnuRecentFile02)
Case #mnuRecentFile03
Debug GetMenuItemText(MainMenu, #mnuRecentFile03)
Case #mnuRecentFile04
Debug GetMenuItemText(MainMenu, #mnuRecentFile04)
Case #mnuExit
WriteRecentFileList()
End
CD