should fast than use Select 'EventMenu() or EventGadget()'

Share your advanced PureBasic knowledge/code with the community.
User avatar
gurj
Enthusiast
Enthusiast
Posts: 664
Joined: Thu Jan 22, 2009 3:48 am
Location: china
Contact:

should fast than use Select 'EventMenu() or EventGadget()'

Post by gurj »

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.
my pb for chinese:
http://ataorj.ys168.com
User avatar
mk-soft
Always Here
Always Here
Posts: 5409
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: should fast than use Select 'EventMenu() or EventGadget(

Post by mk-soft »

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.
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
gurj
Enthusiast
Enthusiast
Posts: 664
Joined: Thu Jan 22, 2009 3:48 am
Location: china
Contact:

Re: should fast than use Select 'EventMenu() or EventGadget(

Post by gurj »

try this:

Code: Select all

Procedure DoEventMenu()
  Protected MenuID = EventMenu()
  ;Select MenuID
   ; Case 0 To #CallEventMenuCount - 1
      *CallEventMenu\Invoke[MenuID]()
  ;EndSelect
EndProcedure

Code: Select all

;Data.i @DoEventMainMenuEdit()
my pb for chinese:
http://ataorj.ys168.com
User avatar
mk-soft
Always Here
Always Here
Posts: 5409
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: should fast than use Select 'EventMenu() or EventGadget(

Post by mk-soft »

Ups... small bug 8)

We needed selection of menu for mac menu events... Update code
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Post Reply