Seite 2 von 3
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 18:49
von Falko
Anscheinend muss man sich dann immer mit
IsWindow absichern und zu guter Letzt ein End
einbauen, damit das Programm nicht unendlich im Hintergrund
weiter läuft.
Code: Alles auswählen
OpenWindow(1, 0, 0, 800, 600, "Fenster", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
Repeat
If IsWindow(1)
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseWindow(EventWindow())
EndSelect
Else
End
EndIf
ForEver
Gruß Falko
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 18:56
von Daffy0815
Hallo Falko, das löst leider das Problem nicht.
Entweder müsste es so etwas geben wie "KillCommandStack" oder "IsWindow(IRGENDEINWINDOW)"
Gruß
Daffy
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 19:00
von ts-soft
Was macht es für einen Sinn, das Programm in einem EventLoop einzusperren, in dem gar keine
Ereignisse mehr kommen können, da kein Fenster existiert? Da kommt man ja nie wieder raus!
Völliger Blödsinn sowas.
Code: Alles auswählen
OpenWindow(1, 0, 0, 800, 600, "Fenster", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
Und wenn man einen EventLoop öfters braucht, aber auch verlassen möchte, dann kommt der in eine
Procedure. Wo ist da das Problem?
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 20:08
von PMV
Nun das Problem:
"CloseWindow(WindowAktiv.i)" schließt das (einzige geöffnete) Fenster und löst damit den Event_CloseWindow aus bevor durch die folgende
Anweisung "WindowAktiv.i = Einrichtenmenue()" wieder ein neues Fenster geöffnet wird.
Wenn ich dich richtig verstanden hab, dann machst du innerhalb deiner Eventschleife
... und weil nur durch die Ereignisbehandlung innerhalb von
(Wait)WindowEvent() Fenster erstellt und geschlossen werden,
steigt das Programm dort aus. Wie wäre es dann, erst das
neue Fenster zu erstellen und dann das alte zu schließen?
Code: Alles auswählen
; ...
altid = id
id = OpenWindow()
CloseWindow(altid)
; ...
So ist doch ganz einfach sicher gestellt, dass immer ein
Fenster offen ist.
Und fast vergessen:
Da zum Zeitpunkt der Abfrage "WaitWindowEvent()" kein Fenster mehr offen ist, steigt nun zeitweise der Compiler mit der Fehlermeldung
"ERROR Mindestens ein Fenster sollte geöffnet sein um diesen Befehl zu verwenden" aus.

Das hat mit dem Compiler nichts zu tun. Der ist da schon
lange fertig.
MFG PMV
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 20:19
von Daffy0815
@PMC
Das mit dem vorher neues Fenster öffnen und dann erst altes Fenster schließen ist im Prinzip eine Lösung.
Ist in meinem Fall aber nicht praktikabel da das "neue" Fenster erst in der nach "CloseWindow(WindowAktiv.i)" folgenden
Prozedur geöffnet wird.
Ich habe das ganze Programm "Anwendungsorientiert" aufgebaut so das die entsprechenden Fenster in den zugehörigen Prozeduren geöffnet werden.
Ich habe das Problem allerdings mittlerweile auf eine andere Weise gelöst. Das Schließen des alten Fensters und das Öffnen des neuen Fensters werden jetzt über Variablen gesteuert so das der beschriebene Fall nicht mehr auftritt.
Nichts desto trotz wäre eine Anweisung zum Löschen des Eventstapels eine feine Sache.
Gruß
Daffy
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 20:26
von ts-soft
Daffy0815 hat geschrieben:Nichts desto trotz wäre eine Anweisung zum Löschen des Eventstapels eine feine Sache.
Damit Windows dann nicht mehr aufräumen kann?
Du hast Windows immer noch nicht verstanden, der Eventstapel muß bis zum Schluss durchgereicht werden.
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 22:24
von PMV
Daffy0815 hat geschrieben:@PMC
kenn ich den?
Das mit dem vorher neues Fenster öffnen und dann erst altes Fenster schließen ist im Prinzip eine Lösung.
Ist in meinem Fall aber nicht praktikabel da das "neue" Fenster erst in der nach "CloseWindow(WindowAktiv.i)" folgenden
Prozedur geöffnet wird.
Dein Code:
Code: Alles auswählen
; ...
SpeichernSequenzerparameter()
CloseWindow(WindowAktiv.i)
WindowAktiv.i = Einrichtenmenue()
; ...
wird zu:
Code: Alles auswählen
; ...
SpeichernSequenzerparameter()
altWindowAktiv = WindowAktiv
WindowAktiv = Einrichtenmenue()
CloseWindow(altWindowAktiv)
; ...
Problem?

Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 22:36
von Daffy0815
@PMV
Ja, so in etwa habe ich es jetzt gemacht...
Gruß
Daffy
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 22:37
von ts-soft
@PMV
Das macht man grundsätzlich so, dasselbe gilt für DisableWindow usw., damit die eigene Anwendung
in der ZOrder nicht nach hinten fällt. Egal, er hat es ja gelöst.
Re: WaitWindowEvent() oder Katze beißt sich in den Schwanz
Verfasst: 01.03.2011 23:24
von inc.
OT/
Thomas was hast Du mit Deinem Profilbild gemacht??
Das war doch quasi ein etabliertes Markenzeichen des Unternehmens TS-Soft?
Das irritiert ... CocaCola ändert sein Logo auch nicht, da wäre der Kult bzw. die Markenidentität kaputt, .... nur so aus Sicht des Marketings
/OT off