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