Code: Select all
EnableExplicit
#Window = 0
#Menu = 0
Enumeration Gadget
#Field
#btnMenu
#btnAdd
EndEnumeration
Global NewList RecentUsed.s()
Global MenuMax = -1
Define i, eMenu
Procedure AddLast()
Protected tmp$
tmp$ = GetGadgetText(#Field)
ForEach RecentUsed()
If tmp$ = RecentUsed()
MoveElement(RecentUsed(), #PB_List_First)
ProcedureReturn
EndIf
Next
SelectElement(RecentUsed(), 0)
If InsertElement(RecentUsed())
RecentUsed() = tmp$
EndIf
While ListSize(RecentUsed()) > 10 ; the maximum number of items in the menu
LastElement(RecentUsed())
DeleteElement(RecentUsed())
Wend
MenuMax = ListSize(RecentUsed()) - 1
EndProcedure
If OpenWindow(#Window, 0, 0, 470, 100, "Enter text and click use", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(#Field, 10, 10, 400, 28 , "")
ButtonGadget(#btnMenu, 415, 10, 28, 28, Chr($25BC))
ButtonGadget(#btnAdd, 185, 45, 70, 28, "Use")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
eMenu = EventMenu()
Select eMenu
Case 0 To MenuMax
SetGadgetText(#Field, GetMenuItemText(#Menu , eMenu))
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #btnAdd
AddLast()
Case #btnMenu
If IsMenu(#Menu)
FreeMenu(#Menu)
EndIf
If CreatePopupMenu(#Menu)
i = 0
ForEach RecentUsed()
MenuItem(i, RecentUsed())
i + 1
Next
EndIf
DisplayPopupMenu(#Menu, WindowID(#Window), WindowX(#Window, #PB_Window_InnerCoordinate) + 10, WindowY(#Window, #PB_Window_InnerCoordinate) + 38)
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(#Window)
End
EndSelect
ForEver
EndIf