Template diverser Eventschleifen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: Template diverser Eventschleifen

Beitrag 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()
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Template diverser Eventschleifen

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Template diverser Eventschleifen

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten