WaitWindowEvent erhält nicht ausgelöste Events
Verfasst: 02.03.2010 10:43
				
				Hallöchen, sitz schon seit ein paar Tagen an dem Problem, dass WaitWindowEvent die Werte für nicht ausgelöste Events in meine Event-Variable speichert. Daraufhin verläuft der Programmablauf nicht wie geplant (Select usw.). Der Fehler lässt sich leider nicht in einen Testcode reproduzieren, sondern tritt nur in meinem Projekt auf 
 Enable Explicit ist aktiviert also keine Rächtschraipfehler 
 
Achtung der Code ist offensichtlich nicht ausführbar, da ich die serielle Schnittstelle benutze.
Folgend der Code zum Verständnis in dem ich die Variable verwende(manipuliere).
Eine Prozedur zum Auswählen des Comports (die Variable Event ist zwar Protected aber man kann ja nie wissen):
Diese Prozedur wird vor der Main Loop einmalig aufgerufen und läuft nie zeitgleich mit dieser.
Die Main-Loop:
Zur seriellen Schnittstelle: vor der Main Loop öffne ich nur die Schnittstelle (und erstelle das Fenster 
 ) und während die Main Loop den Fehler erzeugt treffen keineDaten ein.
Der Debugger zeigt mir für die Konstante #PB_Event_Gadget den Wert 332C an und genau dieser Wert ist auch in meiner Event-Variablen enthalten obwohl ich keinen Button betätige oder auch nur die Maus bewege. Merkwürdigerweise wechselt die Variable Event alternierend zwischen den Werten 0(=#Null) und 332C(=#PB_Event_Gadget) nach jedem Schleifendurchlauf. Stehe für Rückfragen bereit und hoffe auf eine Lösung für dieses Problem.
Gruss alDo
			Achtung der Code ist offensichtlich nicht ausführbar, da ich die serielle Schnittstelle benutze.
Folgend der Code zum Verständnis in dem ich die Variable verwende(manipuliere).
Eine Prozedur zum Auswählen des Comports (die Variable Event ist zwar Protected aber man kann ja nie wissen):
Code: Alles auswählen
Procedure.s selectComport()
  
  Protected Event, GadgetID, COMPORT$, EXIT, i
  
  If OpenWindow(#WINDOW_SELECT,#PB_Ignore,#PB_Ignore,230,60,"Select Comport",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ComboBoxGadget(#COMBO_BOX   , 10, 30,130, 20,#PB_ComboBox_UpperCase)
      ButtonGadget(#SELECTButton,150, 30, 70, 20,"Select")
        TextGadget(#SELECTText  , 10, 10,190, 20,"Select the available comport:",#PB_Text_Right)
  EndIf
  
  For i=2 To 100
    If ReadFile(0,"COM"+Str(i)+":")                ; try to read the comport i
      AddGadgetItem(#COMBO_BOX,-1,"COM"+Str(i))    ; add available COM to combobox
      CloseFile(0)                                 ; close comport
    EndIf
  Next
  
  SetGadgetState(#COMBO_BOX,0)
  
  Repeat
    Event = WaitWindowEvent()
    GadgetID = EventGadget()
    
    Select Event
      
      Case #PB_Event_Gadget
        
        If GadgetID = #COMBO_BOX
        
        ElseIf GadgetID = #SELECTButton
          COMPORT$ = GetGadgetText(#COMBO_BOX)
          CloseWindow(#WINDOW_SELECT)
          ProcedureReturn COMPORT$
          
        EndIf
      
      Case #PB_Event_CloseWindow
        EXIT = 1
      
    EndSelect
    
  Until EXIT
  
  End
  
EndProcedureDie Main-Loop:
Code: Alles auswählen
Define n, StartTime, Event, EventGadget, EXIT
StartTime = ElapsedMilliseconds()
Repeat                                                                       ; eventloop
  Event = WaitWindowEvent(10)
  EventGadget = EventGadget()
  
  Result = AvailableSerialPortInput(SerPort)
  Select Event
    
    Case #Null                                                               ; timeout
      SetGadgetText(#CAN_MESSAGERECBYTESString,Str(Result))                  ; number of received bytes
      If Result > 7                                                          ; filtering garbage
        receiveCANMessage()
      EndIf
      
    Case #PB_Event_Gadget
      handleButtons(EventGadget)
      
    Case #PB_Event_CloseWindow
      EXIT = 1
      
  EndSelect
  
Until EXIT
closeCAN(SendBuffer())
CloseSerialPort(SerPort)
DisableExplicit
EndDer Debugger zeigt mir für die Konstante #PB_Event_Gadget den Wert 332C an und genau dieser Wert ist auch in meiner Event-Variablen enthalten obwohl ich keinen Button betätige oder auch nur die Maus bewege. Merkwürdigerweise wechselt die Variable Event alternierend zwischen den Werten 0(=#Null) und 332C(=#PB_Event_Gadget) nach jedem Schleifendurchlauf. Stehe für Rückfragen bereit und hoffe auf eine Lösung für dieses Problem.
Gruss alDo