Seite 1 von 1

BindEvent - alle Ereignisse bequem binden

Verfasst: 11.04.2020 17:22
von X0r
Moin,

ich habe seit langer Zeit nichts mehr mit PureBasic gemacht und schaue mir gerade die BindEvent-Funktionalität an. Ich möchte nun erreichen, dass ich über einen simplen Aufruf alle Ereignisse eines Fensters an einen Callback binden kann. Damit möchte ich quasi #PB_Event_SizeWindow, #PB_Event_MoveWindow etc. im Callback abfragen.

Ist dies ohne mehrmaligen Aufruf von BindEvent möglich?

Re: BindEvent - alle Ereignisse bequem binden

Verfasst: 11.04.2020 17:51
von mk-soft
Hatte ich auch schon gesucht. Geht leider nicht...

Schon mal grob vorbereitet

Code: Alles auswählen

;-TOP

Enumeration Windows
  #Main
EndEnumeration

Enumeration Gadgets
  
EndEnumeration

Enumeration Status
  #MainStatusBar
EndEnumeration

Procedure BindWindowEvents(Callback, Window)
  BindEvent(#PB_Event_CloseWindow, Callback, Window)
  BindEvent(#PB_Event_MoveWindow, Callback, Window)
  BindEvent(#PB_Event_SizeWindow, Callback, Window)
  BindEvent(#PB_Event_ActivateWindow, Callback, Window)
  BindEvent(#PB_Event_DeactivateWindow, Callback, Window)
  BindEvent(#PB_Event_MaximizeWindow, Callback, Window)
  BindEvent(#PB_Event_MinimizeWindow, Callback, Window)
EndProcedure

Procedure UnbindWindowEvents(Callback, Window)
  UnbindEvent(#PB_Event_CloseWindow, Callback, Window)
  UnbindEvent(#PB_Event_MoveWindow, Callback, Window)
  UnbindEvent(#PB_Event_SizeWindow, Callback, Window)
  UnbindEvent(#PB_Event_ActivateWindow, Callback, Window)
  UnbindEvent(#PB_Event_DeactivateWindow, Callback, Window)
  UnbindEvent(#PB_Event_MaximizeWindow, Callback, Window)
  UnbindEvent(#PB_Event_MinimizeWindow, Callback, Window)
EndProcedure

Procedure DoEventWindow()
  Select Event()
    Case #PB_Event_CloseWindow
      Debug "Close Window"
    Case #PB_Event_SizeWindow
      Debug "Size Window"
      
  EndSelect
EndProcedure

Procedure Main()
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, "Window" , #MainStyle)
    
    BindWindowEvents(@DoEventWindow(), #Main)
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

Re: BindEvent - alle Ereignisse bequem binden

Verfasst: 11.04.2020 18:06
von X0r
Vielen Dank, mk-soft.

Ist etwas unschön, dass PureBasic dies von Haus aus nicht untersützt.

Re: BindEvent - alle Ereignisse bequem binden

Verfasst: 12.04.2020 21:48
von HeX0R
Na ja, der große Vorteil von BindEvent ist ja, dass Du versch. Prozeduren für versch. Ereignisse anlegen kannst.
z.B. "OnButton_Click()", oder "OnComboBox_Change()".
Das was Du da möchtest, lässt sich doch viel einfacher erledigen, z.B. so:

Code: Alles auswählen

Procedure MyEventHandling(Event)
	
	Select Event
		Case #PB_Event_MoveWindow
		
		Case #PB_Event_SizeWindow
			
		Case #PB_Event_ActivateWindow
			
		Case #PB_Event_Gadget
			Select EventGadget()
					
					
			EndSelect
		...
	EndSelect

EndProcedure


Repeat
	Event = WaitWindowEvent()
	Select EventWindow()
		Case #DasWindowInteressiertMich
			MyEventHandling(Event)

Re: BindEvent - alle Ereignisse bequem binden

Verfasst: 12.04.2020 22:31
von helpy
Noch eine Möglichkeit: SetWindowCallback