Page 1 of 1

[5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 8:45 am
by ThoPie
On 5.11 my code works, on 5.20b2 I got an Endless Event-Loop. Whats my mistake?

Code: Select all

Enumeration
  #wndWindow
  #strEingabe
  #btnSuche
  #btnAbbrechen
  #txtTreffer
EndEnumeration

Procedure Test()
  Protected.i ENDE,YPOS,ANZ
  Protected.s ST
  ; ENDE - Schleifenabschluss
  ; YPOS - Y-Position
  ; ANZ  - Anzahl der Suchtreffer
  ; ST   - Suchtext
  OpenWindow(#wndWindow,#PB_Ignore,#PB_Ignore,450,180,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  YPOS=10
  TextGadget(#PB_Any,10,YPOS,430,30,"Eingabe:")
  YPOS+30
  StringGadget(#strEingabe,10,YPOS,370,25,"")
  YPOS+35
  ButtonGadget(#btnSuche,10,YPOS,80,30,"Suche",#PB_Button_Default)
  ButtonGadget(#btnAbbrechen,100,YPOS,80,30,"Abbrechen")
  StartDrawing(WindowOutput(#wndWindow))
  YPOS+40
  Line(10,YPOS,430,1,RGB(Random(255), Random(255), Random(255)))
  StopDrawing()
  YPOS+10
  TextGadget(#txtTreffer,10,YPOS,430,30,"")
  SetActiveGadget(#strEingabe)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        
        ; endless loop
        MessageRequester("ok","Event-Gadget")
        
        Select EventGadget()
          Case #strEingabe
            Select EventType()
              Case #PB_EventType_Change
                
                ; Eingabe verarbeiten
                ANZ=10
                
            EndSelect
          Case #btnSuche
            ENDE=1
          Case #btnAbbrechen
            ENDE=2
        EndSelect
        Select ANZ
          Case 0
            SetGadgetText(#txtTreffer,"Es wurden keine passenden Suchtreffer gefunden!")
          Case 1
            SetGadgetText(#txtTreffer,"Suchtreffer eindeutig!")
          Default
            SetGadgetText(#txtTreffer,"Es wurden "+ANZ+" passende Suchtreffer gefunden!")  
        EndSelect
        If ST=""
          SetGadgetText(#txtTreffer,"")
        EndIf
      Case #PB_Event_CloseWindow
        ENDE=2
      Case #WM_KEYDOWN
        Select EventwParam()
          Case #VK_RETURN
            If ANZ>0
              ENDE=1
            EndIf
          Case #VK_ESCAPE
            ENDE=2
        EndSelect
    EndSelect
  Until ENDE>0
  CloseWindow(#wndWindow)
EndProcedure

Test()

Re: [5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 9:09 am
by Demivec
ThoPie wrote:On 5.11 my code works, on 5.20b2 I got an Endless Event-Loop. Whats my mistake?
The code loops endlessly for me in both 5.11 and 5.20b2 using Windows XP x86.

Try clearing the events (from declaring the window and gadgets) before the Repeat/Until loop:

Code: Select all

While WindowEvent() <> 0: Wend

Re: [5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 9:44 am
by ThoPie
Hi Demivec,
I tried your suggestion - but it helps nothing.
In my 5.11 installation it works without any problems. Curious.
ThoPie

Re: [5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 9:48 am
by User_Russian
This is not a bug.
There is no problem.

Code: Select all

Enumeration
  #wndWindow
  #strEingabe
  #btnSuche
  #btnAbbrechen
  #txtTreffer
EndEnumeration

Procedure Test()
  Protected.i ENDE,YPOS,ANZ
  Protected.s ST
  ; ENDE - Schleifenabschluss
  ; YPOS - Y-Position
  ; ANZ  - Anzahl der Suchtreffer
  ; ST   - Suchtext
  OpenWindow(#wndWindow,#PB_Ignore,#PB_Ignore,450,180,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  YPOS=10
  TextGadget(#PB_Any,10,YPOS,430,30,"Eingabe:")
  YPOS+30
  StringGadget(#strEingabe,10,YPOS,370,25,"")
  YPOS+35
  ButtonGadget(#btnSuche,10,YPOS,80,30,"Suche",#PB_Button_Default)
  ButtonGadget(#btnAbbrechen,100,YPOS,80,30,"Abbrechen")
  StartDrawing(WindowOutput(#wndWindow))
  YPOS+40
  Line(10,YPOS,430,1,RGB(Random(255), Random(255), Random(255)))
  StopDrawing()
  YPOS+10
  TextGadget(#txtTreffer,10,YPOS,430,30,"")
  SetActiveGadget(#btnSuche)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        
        ; endless loop
        MessageRequester("ok","Event-Gadget")
        
        Select EventGadget()
          Case #strEingabe
            Select EventType()
              Case #PB_EventType_Change
                
                ; Eingabe verarbeiten
                ANZ=10
                
            EndSelect
          Case #btnSuche
            ENDE=1
          Case #btnAbbrechen
            ENDE=2
        EndSelect
        Select ANZ
          Case 0
            SetGadgetText(#txtTreffer,"Es wurden keine passenden Suchtreffer gefunden!")
          Case 1
            SetGadgetText(#txtTreffer,"Suchtreffer eindeutig!")
          Default
            SetGadgetText(#txtTreffer,"Es wurden "+ANZ+" passende Suchtreffer gefunden!")  
        EndSelect
        If ST=""
          SetGadgetText(#txtTreffer,"")
        EndIf
      Case #PB_Event_CloseWindow
        ENDE=2
      Case #WM_KEYDOWN
        Select EventwParam()
          Case #VK_RETURN
            If ANZ>0
              ENDE=1
            EndIf
          Case #VK_ESCAPE
            ENDE=2
        EndSelect
    EndSelect
  Until ENDE>0
  CloseWindow(#wndWindow)
EndProcedure

Test()
Do not forget about #PB_EventType_Focus and #PB_EventType_LostFocus at StringGadget.

Re: [5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 10:20 am
by ThoPie
Please can anybody correct my code, so that it's work.
Thanks a lot.

Re: [5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 10:24 am
by Demivec
ThoPie wrote:Please can anybody correct my code, so that it's work.
Remove the MessageRequester in the event loop. Every time it appears it generates windows events. It looks like it is there just for debugging. Just replace it with Debug.

Re: [5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 10:41 am
by ThoPie
Ahh ok.
But I have to switch Debug "off" because it generates an Assembler-Error.
Thx

Re: [5.20b] Endless Event-Loop

Posted: Mon Jun 24, 2013 10:45 am
by Demivec
If you can't have the debugger on, you can also open a console window and print text to that, wait for input, and then continue.

Code: Select all

        ;MessageRequester("ok","Event-Gadget")
        OpenConsole("ok"): PrintN("Event-Gadget"): Input(): CloseConsole()

Re: [5.20b] Endless Event-Loop

Posted: Tue Jun 25, 2013 12:28 am
by em_uk
I couldn't get your code to work properly, while there wasn't any bugs, things like

Code: Select all

If ST=""
          SetGadgetText(#txtTreffer,"")
EndIf
With every loop, because ST=0, we were setting the gadgettext to blank everytime.

And correct me if I'm wrong but you don't use the Line command like that. I moved some stuff around, but don't know too sure what you were trying to achieve.

Code: Select all

Enumeration
  #wndWindow
  #strEingabe
  #btnSuche
  #btnAbbrechen
  #txtTreffer
  #imggadget
  #image
EndEnumeration

Procedure Test()
  Protected.i ENDE,YPOS,ANZ
  Protected.s ST
  ; ENDE - Schleifenabschluss
  ; YPOS - Y-Position
  ; ANZ  - Anzahl der Suchtreffer
  ; ST   - Suchtext
  OpenWindow(#wndWindow,#PB_Ignore,#PB_Ignore,450,180,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  
  YPOS=10
  TextGadget(#PB_Any,10,YPOS,430,30,"Eingabe:")
  YPOS+30
  StringGadget(#strEingabe,10,YPOS,370,25,"")
  YPOS+35
  ButtonGadget(#btnSuche,10,YPOS,80,30,"Suche",#PB_Button_Default)
  ButtonGadget(#btnAbbrechen,100,YPOS,80,30,"Abbrechen")
  CreateImage(#image, 370, 20)
  StartDrawing(ImageOutput(#image))
  YPOS+40
  Line(0,0,430,20,RGB(Random(255), Random(255), Random(255)))
  StopDrawing()
  YPOS+20
  TextGadget(#txtTreffer,10,YPOS,430,30,"Type in the string gadget 1/2 ..")
  ImageGadget(#imggadget, 10, YPOS-25, 430, 30, ImageID(#image))

  SetActiveGadget(#btnSuche)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #strEingabe
            Select EventType()
              Case #PB_EventType_Change
                
                ; Eingabe verarbeiten
                ANZ$=Left(GetGadgetText(#strEingabe),1)
                Debug "Chnage "+Str(anz)
                Select ANZ$
                  Case "2"
                    SetGadgetText(#txtTreffer,"Es wurden keine passenden Suchtreffer gefunden!")
                  Case "1"
                    SetGadgetText(#txtTreffer,"Suchtreffer eindeutig!")
                  Default
                    SetGadgetText(#txtTreffer,"Es wurden "+ANZ$+" passende Suchtreffer gefunden!") 
                EndSelect                
            EndSelect
          Case #btnSuche
            ENDE=1
          Case #btnAbbrechen
            ENDE=2
        EndSelect
        
;         If ST=""
;           SetGadgetText(#txtTreffer,"")
;         EndIf
      Case #PB_Event_CloseWindow
        ENDE=2
      Case #WM_KEYDOWN
        Select EventwParam()
          Case #VK_RETURN
            If ANZ>0
              ENDE=1
            EndIf
          Case #VK_ESCAPE
            ENDE=2
        EndSelect
    EndSelect
  Until ENDE>0
  CloseWindow(#wndWindow)
EndProcedure

Test()