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
EndProcedure
Die 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
End

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