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