BindEvent - alle Ereignisse bequem binden

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

BindEvent - alle Ereignisse bequem binden

Beitrag 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?
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: BindEvent - alle Ereignisse bequem binden

Beitrag 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()
Zuletzt geändert von mk-soft am 11.04.2020 18:17, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Re: BindEvent - alle Ereignisse bequem binden

Beitrag von X0r »

Vielen Dank, mk-soft.

Ist etwas unschön, dass PureBasic dies von Haus aus nicht untersützt.
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: BindEvent - alle Ereignisse bequem binden

Beitrag 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)
Benutzeravatar
helpy
Beiträge: 635
Registriert: 29.08.2004 13:29

Re: BindEvent - alle Ereignisse bequem binden

Beitrag von helpy »

Noch eine Möglichkeit: SetWindowCallback
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Antworten