Seite 1 von 1
Pure Code stopt wenn Fester verschoben wird. (Erledigt)
Verfasst: 10.03.2017 09:47
von tft
Hallo,
ich habe folgendes Problem. Und ich bilde mir ein das das bei vorherigen PB Versionen, oder < W10 nicht so war.
Folgender Code unterbricht die Arbeit wenn ich das Fenster verschiebe oder es auch nur im oberen Bereich festhalte.
Code: Alles auswählen
hWnd1 = OpenWindow(0, 0, 0, 400, 500, "ComPortApp", #PB_Window_SystemMenu| #PB_Window_ScreenCentered) : If hWnd1=0: Debug "Cant open window": End: EndIf
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case Eingabezeile
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
If CodeRun < ElapsedMilliseconds()
CodeRun = ElapsedMilliseconds()+1000
Debug("Code running")
EndIf
Until Quit = 1
End
Ich habe W 10 auf meinem Rechner.
Gruss TFT
Re: Pure Code stopt wenn Fester verschoben wird.
Verfasst: 10.03.2017 09:56
von RSBasic
Das einzige, was ich sehe ist, dass du WindowEvent() verwendest.
Versuche es stattdessen mit WaitWindowEvent(1000).
Re: Pure Code stopt wenn Fester verschoben wird.
Verfasst: 10.03.2017 10:23
von tft
Hallo,
WindowEvent wartet nicht auf ein Event. Sondern Meldet nur wenn eins anliegt. Und genau so brauche ich das auch. Da Nachfolgend weiterer Code
abgearbeitet werden muss. Wenn man Daten von der Seriellen Com Schnitstelle holen muss. Bekommt man sonst einen überlauf oder sogar einen Absturtz.
Kann es sein das sich die grundlegende vorgehensweise bei der Windows Programierung geändert hat. Ich rede hier von einem Zeitraum >10 Jahre.
Wegen des eingeführten Event Systems kann ich mir auch vorstellen das alle Windows relevanten sachen gänzlich vom Arbeits Code getrennt werden müssen.
Zum beispiel als Task oder Prozess. Für die Meisten Anwendungen ist ein solcher Stop des Programs nicht relevant weil der Benutzer sowiso gerade etwas anderes macht.
Gruss TFT
Re: Pure Code stopt wenn Fester verschoben wird.
Verfasst: 10.03.2017 11:13
von RSBasic
tft hat geschrieben:WindowEvent wartet nicht auf ein Event
Du kannst ja auch den Timeout-Parameter verwenden, um trotzdem jede Sekunde deine Schleife abzuarbeiten.
tft hat geschrieben:Kann es sein das sich die grundlegende vorgehensweise bei der Windows Programierung geändert hat. Ich rede hier von einem Zeitraum >10 Jahre.
Nein
tft hat geschrieben:Folgender Code unterbricht die Arbeit wenn ich das Fenster verschiebe oder es auch nur im oberen Bereich festhalte.
Das ist normal und war schon immer so, auch in Windows 7 war das Problem bereits vorhanden. Soweit ich weiß besteht dieses Problem erst seit Einführung von BindEvent(), da die Ereignisverarbeitung von PB geändert wurde.
Um das zu umgehen, benutze BindEvent und Timer:
Code: Alles auswählen
EnableExplicit
Define hWnd1
Define Event
Define Quit
Define Eingabezeile
Procedure Timer()
Select EventTimer()
Case 1
Debug("Code running")
EndSelect
EndProcedure
hWnd1 = OpenWindow(0, 0, 0, 400, 500, "ComPortApp", #PB_Window_SystemMenu| #PB_Window_ScreenCentered) : If hWnd1=0: Debug "Cant open window": End: EndIf
AddWindowTimer(0, 1, 1000)
BindEvent(#PB_Event_Timer, @Timer(), 0)
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case Eingabezeile
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
End
Re: Pure Code stopt wenn Fester verschoben wird.
Verfasst: 10.03.2017 11:35
von tft
Hallo,
danke für die Hilfe. Ja so geht das prima.
Gruss TFT