Seite 2 von 2

Re: Mehrere Callbacks für ein Fenster?

Verfasst: 17.01.2013 19:10
von mk-soft
Wenn die Objekte (Menu´s, Gadget´s) oder die Event´s mit Konstanten erstellt sind dann kann man auch über eine virtuelle Tabelle diese abarbeiten. Geht besonders schnell da die Function über die ID direkt aufgerufen wird.

Beispiel aus mein ...Generate... automatisch erzeugen Code

Code: Alles auswählen

;-TOP

; Visual Generate EventMain (Do Not Edit - Allways Overwrite)

; *********************************************************************************************************

; Init Event Pointer

Prototype MyProtoInvoke()
Prototype MyProtoInvoke2(EventType)

Structure udtCallEvent
  Invoke.MyProtoInvoke[0]
EndStructure

Structure udtCallEvent2
  Invoke.MyProtoInvoke2[0]
EndStructure

Global *CallEventMenu.udtCallEvent   = ?CallEventMenu
Global *CallEventGadget.udtCallEvent2 = ?CallEventGadget
Global *CallEventSize.udtCallEvent   = ?CallEventSize
Global *CallEventExit.udtCallEvent   = ?CallEventExit

#CallEventMenuCount = 3
#CallEventGadgetCount = 6
#CallEventWindowCount = 2

; *********************************************************************************************************

Procedure MyEventMenu(MenuID)
  If MenuID >= 0 And MenuID < #CallEventMenuCount
    *CallEventMenu\Invoke[MenuID]()
  EndIf
EndProcedure

; *********************************************************************************************************

Procedure MyEventGadget(GadgetID, EventType)
  If GadgetID >= 0 And GadgetID < #CallEventGadgetCount
    *CallEventGadget\Invoke[GadgetID](EventType)
  EndIf
EndProcedure

; *********************************************************************************************************

Procedure MyEventSize(WindowID)
  If WindowID >= 0 And WindowID < #CallEventWindowCount
    *CallEventSize\Invoke[WindowID]()
  EndIf
EndProcedure

; *********************************************************************************************************

Procedure MyEventExit(WindowID)
  If WindowID >= 0 And WindowID < #CallEventWindowCount
    *CallEventExit\Invoke[WindowID]()
  EndIf
EndProcedure

; *********************************************************************************************************

Procedure MyEventDispatch(EventType)
  
EndProcedure

; *********************************************************************************************************

DataSection
  CallEventMenu:
    Data.i @EventMenu_Main_MenuItem_Dialog()
    Data.i @EventMenu_Main_MenuItem_Exit()
    Data.i @EventMenu_Dialog2_MenuItem_Exit()
  CallEventGadget:
    Data.i @EventGadget_Main_Button_Yes()
    Data.i @EventGadget_Main_Button_DoCancel()
    Data.i @MyEventDispatch()
    Data.i @EventGadget_Dialog2_Button_Yes()
    Data.i @EventGadget_Dialog2_Button_Cancel()
    Data.i @MyEventDispatch()
  CallEventSize:
    Data.i @EventSize_Main()
    Data.i @EventSize_Dialog2()
  CallEventExit:
    Data.i @EventExit_Main()
    Data.i @EventExit_Dialog2()
EndDataSection

; *********************************************************************************************************