Verschachtelte Eventverarbeitung möglich.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Verschachtelte Eventverarbeitung möglich.

Beitrag 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?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Verschachtelte Eventverarbeitung möglich.

Beitrag von ts-soft »

Wo ist die Routine für das erste Fenster?

Ist es deaktiviert?, sichtbar? ... ... ...
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Verschachtelte Eventverarbeitung möglich.

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Verschachtelte Eventverarbeitung möglich.

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Verschachtelte Eventverarbeitung möglich.

Beitrag von ProgOldie »

Danke ts-soft, genauso funktioniert es!
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten