GELÖSCHT

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
mk-soft
Beiträge: 3902
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Mehrere Callbacks für ein Fenster?

Beitrag 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

; *********************************************************************************************************
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten