Hier ein kleiner Wrapper um mehrere gleiche Menu-IDs in unterschiedlichen Menüs verwenden zu können. Geändert hat sich eigentlich nur 'EventMenu()' und 'EventMenuItem()' ist dazu gekommen.
'EventMenu()' gibt jetzt die IDs des Menüs zurück und 'EventMenuItem()' die ID des MenuItems. Eigentlich logisch.
Code: Alles auswählen
EnableExplicit
;{
Global WRAPPER_Menu_CurrentMenu.i = 0
Global WRAPPER_Menu_CurrentItemID.i = 0
Structure WRAPPER_Menu_Items
menu.i
item.i
EndStructure
Global NewMap WRAPPER_MenuMap.WRAPPER_Menu_Items(128)
Global NewMap WRAPPER_RealID.i(128)
Procedure WRAPPER_CreateImageMenu(Menu.i, WindowID.i, Flags.i = 0)
Protected id.i
id = CreateImageMenu(Menu, WindowID, Flags)
If (id)
If (Menu = #PB_Any)
WRAPPER_Menu_CurrentMenu = id
Else
WRAPPER_Menu_CurrentMenu = Menu
EndIf
EndIf
ProcedureReturn id
EndProcedure
Procedure WRAPPER_CreateMenu(Menu.i, WindowID.i)
Protected id.i
id = CreateMenu(Menu, WindowID)
If (id)
If (Menu = #PB_Any)
WRAPPER_Menu_CurrentMenu = id
Else
WRAPPER_Menu_CurrentMenu = Menu
EndIf
EndIf
ProcedureReturn id
EndProcedure
Procedure WRAPPER_CreatePopupImageMenu(Menu.i, Flags.i = 0)
Protected id.i
id = CreatePopupImageMenu(Menu, Flags)
If (id)
If (Menu = #PB_Any)
WRAPPER_Menu_CurrentMenu = id
Else
WRAPPER_Menu_CurrentMenu = Menu
EndIf
EndIf
ProcedureReturn id
EndProcedure
Procedure WRAPPER_CreatePopupMenu(Menu.i)
Protected id.i
id = CreatePopupMenu(Menu)
If (id)
If (Menu = #PB_Any)
WRAPPER_Menu_CurrentMenu = id
Else
WRAPPER_Menu_CurrentMenu = Menu
EndIf
EndIf
ProcedureReturn id
EndProcedure
Procedure WRAPPER_MenuItem(MenuItemID.i, Text$, ImageID = #PB_Ignore)
If (ImageID = #PB_Ignore)
MenuItem(WRAPPER_Menu_CurrentItemID, Text$)
Else
MenuItem(WRAPPER_Menu_CurrentItemID, Text$, ImageID)
EndIf
If AddMapElement(WRAPPER_MenuMap(), Str(WRAPPER_Menu_CurrentItemID))
WRAPPER_MenuMap()\menu = WRAPPER_Menu_CurrentMenu
WRAPPER_MenuMap()\item = MenuItemID
EndIf
WRAPPER_RealID(Str(WRAPPER_Menu_CurrentMenu) + "." + Str(MenuItemID)) = WRAPPER_Menu_CurrentItemID
WRAPPER_Menu_CurrentItemID + 1
EndProcedure
Procedure WRAPPER_EventMenu()
FindMapElement(WRAPPER_MenuMap(), Str(EventMenu()))
ProcedureReturn WRAPPER_MenuMap()\menu
EndProcedure
Procedure.s WRAPPER_GetMenuItemText(Menu.i, MenuItem.i)
ProcedureReturn GetMenuItemText(Menu, WRAPPER_RealID(Str(Menu) + "." + Str(MenuItem)))
EndProcedure
Procedure.i WRAPPER_GetMenuItemState(Menu.i, MenuItem.i)
ProcedureReturn GetMenuItemState(Menu, WRAPPER_RealID(Str(Menu) + "." + Str(MenuItem)))
EndProcedure
Procedure.i WRAPPER_SetMenuItemState(Menu, MenuItem, State)
ProcedureReturn SetMenuItemState(Menu, WRAPPER_RealID(Str(Menu) + "." + Str(MenuItem)), State)
EndProcedure
Procedure.i WRAPPER_SetMenuItemText(Menu, MenuItem, Text$)
ProcedureReturn SetMenuItemText(Menu, WRAPPER_RealID(Str(Menu) + "." + Str(MenuItem)), Text$)
EndProcedure
Procedure EventMenuItem()
FindMapElement(WRAPPER_MenuMap(), Str(EventMenu()))
ProcedureReturn WRAPPER_MenuMap()\item
EndProcedure
Macro EventMenu()
WRAPPER_EventMenu()
EndMacro
Macro MenuItem(MenuItemID, Text, ImageID = #PB_Ignore)
WRAPPER_MenuItem(MenuItemID, Text, ImageID)
EndMacro
Macro CreateImageMenu(Menu, WindowID, Flags = 0)
WRAPPER_CreateImageMenu(Menui, WindowID, Flags)
EndMacro
Macro CreateMenu(Menu, WindowID)
WRAPPER_CreateMenu(Menu, WindowID)
EndMacro
Macro CreatePopupImageMenu(Menu, Flags = 0)
WRAPPER_CreatePopupImageMenu(Menu, Flags = 0)
EndMacro
Macro CreatePopupMenu(Menu)
WRAPPER_CreatePopupMenu(Menu)
EndMacro
Macro GetMenuItemText(Menu, MenuItem)
WRAPPER_GetMenuItemText(Menu, MenuItem)
EndMacro
Macro GetMenuItemState(Menu, MenuItem)
WRAPPER_GetMenuItemState(Menu, MenuItem)
EndMacro
Macro SetMenuItemState(Menu, MenuItem, State)
WRAPPER_SetMenuItemState(Menu, MenuItem, State)
EndMacro
Macro SetMenuItemText(Menu, MenuItem, Text)
WRAPPER_SetMenuItemText(Menu, MenuItem, Text)
EndMacro
;}
DisableExplicit
OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
CreatePopupMenu(0)
MenuItem(1, "Hallo")
MenuItem(2, "Hallo2")
MenuItem(3, "Hallo3")
CreatePopupMenu(1)
MenuItem(1, "AAHallo")
MenuItem(2, "AAHallo2")
MenuItem(3, "AAHallo3")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow
Quit = 1
EndIf
If Event = #PB_Event_Menu
Debug GetMenuItemText(EventMenu(), EventMenuItem())
EndIf
If Event = #PB_Event_RightClick
DisplayPopupMenu(1, WindowID(0))
EndIf
If Event = #PB_Event_LeftClick
DisplayPopupMenu(0, WindowID(0))
EndIf
Until Quit > 0