Share your advanced PureBasic knowledge/code with the community.
gurj
Enthusiast
Posts: 664 Joined: Thu Jan 22, 2009 3:48 am
Location: china
Contact:
Post
by gurj » Sun Nov 18, 2018 8:04 am
Code: Select all
;should fast than use Select 'EventMenu() or EventGadget()'
win0=OpenWindow(0,0,0,300,100,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateMenu(0,win0)
For a=0 To 20
MenuItem(a,""+a)
Next
Dim m(20)
m(0)=?m0
m(1)=?m1
m(2)=?m2
m(3)=?m3
m(4)=?m4
m(5)=?m5
m(6)=?m6
m(7)=?m7
m(8)=?m8
m(9)=?m9
m(10)=?m10
m(11)=?m11
m(12)=?m12
m(13)=?m13
m(14)=?m14
m(15)=?m15
m(16)=?m16
m(17)=?m17
m(18)=?m18
m(19)=?m19
m(20)=?m20
EnableASM
Repeat:ev=WaitWindowEvent():Select ev
Case #PB_Event_Menu:em=EventMenu()
n=m(em):jmp n
m0: :Debug em:Goto em
m1: :Debug em:Goto em
m2: :Debug em:Goto em
m3: :Debug em:Goto em
m4: :Debug em:Goto em
m5: :Debug em:Goto em
m6: :Debug em:Goto em
m7: :Debug em:Goto em
m8: :Debug em:Goto em
m9: :Debug em:Goto em
m10: :Debug em:Goto em
m11: :Debug em:Goto em
m12: :Debug em:Goto em
m13: :Debug em:Goto em
m14: :Debug em:Goto em
m15: :Debug em:Goto em
m16: :Debug em:Goto em
m17: :Debug em:Goto em
m18: :Debug em:Goto em
m19: :Debug em:Goto em
m20: :Debug em
em:
Case #PB_Event_CloseWindow:Break
EndSelect:ForEver
DisableASM
End
Last edited by
gurj on Sun Nov 18, 2018 4:51 pm, edited 1 time in total.
mk-soft
Always Here
Posts: 5409 Joined: Fri May 12, 2006 6:51 pm
Location: Germany
Post
by mk-soft » Sun Nov 18, 2018 1:03 pm
With virtual tables....
In this way I use it for my EventDesigner
Sorry, I thought it was a question.
Update
Code: Select all
;-TOP
Enumeration formWindow
#Main
#CallEventWindowCount
EndEnumeration
Enumeration formMenu
#MainMenu
EndEnumeration
Enumeration formMenuItems
#MainMenuOpen
#MainMenuClose
#MainMenuUndo
#MainMenuRedo
#MainMenuAbout
#CallEventMenuCount
EndEnumeration
Enumeration formGadgets
#MainButtonOk
#CallEventGadgetCount
EndEnumeration
; ----
Prototype MyProtoInvoke()
Structure udtCallEvent
Invoke.MyProtoInvoke[0]
EndStructure
Global *CallEventMenu.udtCallEvent = ?CallEventMenu
Global *CallEventGadget.udtCallEvent = ?CallEventGadget
Global *CallEventSize.udtCallEvent = ?CallEventSize
Global *CallEventExit.udtCallEvent = ?CallEventExit
Global ExitApplication
; ----
Procedure DoEventMainMenuOpen()
Debug "Menu Open"
EndProcedure
Procedure DoEventMainMenuClose()
Debug "Menu Close"
EndProcedure
Procedure DoEventMainMenuUndo()
Debug "Menu Undo"
EndProcedure
Procedure DoEventMainMenuRedo()
Debug "Menu Redo"
EndProcedure
Procedure DoEventMainMenuAbout()
Debug "Menu About"
EndProcedure
; ----
Procedure DoEventMainButtonOk()
Debug "Button Ok"
EndProcedure
; ----
Procedure DoEventMenu()
Protected MenuID = EventMenu()
Select MenuID
Case 0 To #CallEventMenuCount - 1
*CallEventMenu\Invoke[MenuID]()
; Begin MacMenus
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
Case #PB_Menu_About
Debug "Menu Mac About"
Case #PB_Menu_Preferences
Debug "Menu Mac Preferences"
Case #PB_Menu_Quit
ExitApplication = 1
CompilerEndIf
; End MacMenus
EndSelect
EndProcedure
; ----
Procedure DoEventGadget()
Protected GadgetID = EventGadget()
Select GadgetID
Case 0 To #CallEventGadgetCount - 1
*CallEventGadget\Invoke[GadgetID]()
EndSelect
EndProcedure
; ----
Procedure Main()
If OpenWindow(#Main, 200, 200, 200, 100, "MenuTitle Example")
If CreateMenu(#MainMenu, WindowID(0))
MenuTitle("Project")
MenuItem(#MainMenuOpen, "Open")
MenuItem(#MainMenuClose, "Close")
MenuTitle("&Edit")
MenuItem(#MainMenuUndo, "Undo")
MenuItem(#MainMenuRedo, "Redo")
MenuTitle("Info")
MenuItem(#MainMenuAbout, "About")
EndIf
ButtonGadget(#MainButtonOk, 10, 10, 120, 25, "Ok")
BindEvent(#PB_Event_Menu, @DoEventMenu())
BindEvent(#PB_Event_Gadget, @DoEventGadget())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
ExitApplication = 1
EndSelect
Until ExitApplication
EndIf
EndProcedure : Main()
; ----
; All same order as enumeration
DataSection
CallEventMenu:
Data.i @DoEventMainMenuOpen()
Data.i @DoEventMainMenuClose()
Data.i @DoEventMainMenuUndo()
Data.i @DoEventMainMenuRedo()
Data.i @DoEventMainMenuAbout()
CallEventGadget:
Data.i @DoEventMainButtonOk()
CallEventSize:
CallEventExit:
EndDataSection
Last edited by
mk-soft on Sun Nov 18, 2018 4:16 pm, edited 1 time in total.
gurj
Enthusiast
Posts: 664 Joined: Thu Jan 22, 2009 3:48 am
Location: china
Contact:
Post
by gurj » Sun Nov 18, 2018 3:53 pm
try this:
Code: Select all
Procedure DoEventMenu()
Protected MenuID = EventMenu()
;Select MenuID
; Case 0 To #CallEventMenuCount - 1
*CallEventMenu\Invoke[MenuID]()
;EndSelect
EndProcedure
mk-soft
Always Here
Posts: 5409 Joined: Fri May 12, 2006 6:51 pm
Location: Germany
Post
by mk-soft » Sun Nov 18, 2018 4:18 pm
Ups... small bug
We needed selection of menu for mac menu events... Update code