Seite 1 von 1

Verschachtelte Eventverarbeitung möglich.

Verfasst: 28.05.2015 20:29
von ProgOldie
Hallo,
ich habe eine Prozedur 1 zum universellen Eventhandling. Von dieser Prozedur aus will ich eine weitere Prozedur getEdit(...) rufen, die im Prinzip ein Texteditor ist,allerdings mit der Maßgabe, dass dieses Fenster nur durch das Ereignis #PB_WindowEvent_CloseWindow beendet werden kann. Dazu schränke ich die Mausbewegung ein (WinApiLibrary und RSBasic sei Dank!)

Code: Alles auswählen

Procedure getEdit(irgendwelche Parameter...)
  Protected EditWin.i,Ev.i,r.RECT
 ;... tue etwas
  EditWin=OpenWindow(#PB_Any, 0, 0, 600, 300, "Editor", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
  GetWindowRect_(WindowID(EditWin),r)  ;Mauscursor auf Fenster begrenzen
  ClipCursor_(r)
 ; tue noch was
  Repeat
    Ev=WaitWindowEvent()
  Until EventWindow()=EditWin And Ev = #PB_Event_CloseWindow 
EndProcedure
Alles funktioniert tadellos, bis auf das Beenden der Prozedur durch Schließen des Fensters.
Beißen sich die Eventhandlings aus rufendem Programm und getEdit? Was kann man tun, damit es wie gewünscht funktioniert?

Hat das etwas mit Threads zu tun, von denen ich leider noch keine Ahnung habe?

Re: Verschachtelte Eventverarbeitung möglich.

Verfasst: 28.05.2015 20:40
von ts-soft
Wo ist die Routine für das erste Fenster?

Ist es deaktiviert?, sichtbar? ... ... ...

Re: Verschachtelte Eventverarbeitung möglich.

Verfasst: 28.05.2015 20:44
von matbal
In deinem Event-Loop reagierst du ja auch nicht auf #PB_Event_CloseWindow. Du verläßt nur deine Schleife, aber das Fenster läßt du geöffnet.

Re: Verschachtelte Eventverarbeitung möglich.

Verfasst: 28.05.2015 20:46
von ts-soft
matbal hat geschrieben:In deinem Event-Loop reagierst du ja auch nicht auf #PB_Event_CloseWindow. Du verläßt nur deine Schleife, aber das Fenster läßt du geöffnet.
Das ist mir doch glatt entgangen :allright:

Ich würde das erste Fenster deaktivieren, aber erst nachdem das neue erstellt wurde und dann wieder aktivieren, bevor das zweite geschlossen wird. Dann sollte auch der Quatsch mit dem ClipCursor überflüssig sein.

Code: Alles auswählen

Procedure getEdit(irgendwelche Parameter...)
  Protected EditWin.i,Ev.i,r.RECT
 ;... tue etwas
  EditWin=OpenWindow(#PB_Any, 0, 0, 600, 300, "Editor", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
  DisableWindow(#MainWindow, #True)
;   GetWindowRect_(WindowID(EditWin),r)  ;Mauscursor auf Fenster begrenzen
;   ClipCursor_(r)
 ; tue noch was
  Repeat
    Ev=WaitWindowEvent()
  Until EventWindow()=EditWin And Ev = #PB_Event_CloseWindow
  DisableWindow(#MainWindow, #False)
  CloseWindow(EditWin)
EndProcedure

Re: Verschachtelte Eventverarbeitung möglich.

Verfasst: 28.05.2015 22:55
von ProgOldie
Danke ts-soft, genauso funktioniert es!