Seite 2 von 2

Re: Template diverser Eventschleifen

Verfasst: 23.08.2016 19:52
von Rudi
Heute möchte ich aufzeigen, wie man die Eventschleife verwenden kann, wenn man zig Child-Windows zu managen hat und dabei die Übersicht behalten möchte: Man packt jedes Fenster, inklusive Eventschleife, mit den dazugehörigen Events, in eine Procedure. So hat man alles übersichtlich beisammen. Wichtig: Es kann bei dieser Methode immer nur ein Child-Windows geöffnet sein!

Code: Alles auswählen

EnableExplicit

Procedure Child_Window()
	If OpenWindow(1, 0, 0, 230, 90, "Child Window", #PB_Window_SystemMenu|#PB_Window_ScreenCentered, WindowID(0))
		ButtonGadget(1, 10, 10, 200, 20, "Schließen")
		
		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_Gadget
					Select EventGadget()
						Case 1
							CloseWindow(1)
							Break
					EndSelect
				Case #PB_Event_CloseWindow
					Select EventWindow()
						Case 1
							CloseWindow(1)
							Break
					EndSelect
			EndSelect
		ForEver
	EndIf
EndProcedure

Procedure Mother_Window()
	If OpenWindow(0, 0, 0, 300, 200, "Mother Window", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
		ButtonGadget(0, 10, 10, 200, 20, "Child-Fenster öffnen")
		
		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_Gadget
					Select EventGadget()
						Case 0
							DisableWindow(0, 1)
							Child_Window()
							DisableWindow(0, 0)
					EndSelect
				Case #PB_Event_CloseWindow
					Select EventWindow()
						Case 0
							CloseWindow(0)
							Break
					EndSelect
			EndSelect
		ForEver
	EndIf
	End
EndProcedure

Mother_Window()

Re: Template diverser Eventschleifen

Verfasst: 23.08.2016 21:27
von mk-soft
WaitWindowEvent() mehrmals aufrufen ist keine gute Methode. Führt schnell zu Fehlern in der Eventverwaltung.
Auch wenn es wie in diesen Beispiel richtig funktioniert, da das Main-Fenster deaktiviert wird.

Re: Template diverser Eventschleifen

Verfasst: 23.08.2016 23:33
von RSBasic
@Rudi
Danke für den Code und für deine Mühe.

Ich bevorzuge lieber BindEvents und verknüpfe inzwischen alle Events mit separaten Prozeduren, die meiner Meinung nach besser wartbar und übersichtlicher sind.
Die einzige Eventschleife, die bei mir existiert, besteht nur aus:

Code: Alles auswählen

Repeat : WaitWindowEvent() : ForEver
Alles andere wird in den jeweiligen Prozeduren mit BindEvent(), BindGadgetEvent() und BindMenuEvent() verwaltet und man kann es genauso gut trennen wie in deinem Code.