[5.20b] Endless Event-Loop

Just starting out? Need help? Post your questions and find answers here.
ThoPie
User
User
Posts: 47
Joined: Sat Aug 22, 2009 6:49 pm

[5.20b] Endless Event-Loop

Post 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()
User avatar
Demivec
Addict
Addict
Posts: 4259
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

Re: [5.20b] Endless Event-Loop

Post 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
ThoPie
User
User
Posts: 47
Joined: Sat Aug 22, 2009 6:49 pm

Re: [5.20b] Endless Event-Loop

Post by ThoPie »

Hi Demivec,
I tried your suggestion - but it helps nothing.
In my 5.11 installation it works without any problems. Curious.
ThoPie
User_Russian
Addict
Addict
Posts: 1516
Joined: Wed Nov 12, 2008 5:01 pm
Location: Russia

Re: [5.20b] Endless Event-Loop

Post 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.
ThoPie
User
User
Posts: 47
Joined: Sat Aug 22, 2009 6:49 pm

Re: [5.20b] Endless Event-Loop

Post by ThoPie »

Please can anybody correct my code, so that it's work.
Thanks a lot.
User avatar
Demivec
Addict
Addict
Posts: 4259
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

Re: [5.20b] Endless Event-Loop

Post 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.
ThoPie
User
User
Posts: 47
Joined: Sat Aug 22, 2009 6:49 pm

Re: [5.20b] Endless Event-Loop

Post by ThoPie »

Ahh ok.
But I have to switch Debug "off" because it generates an Assembler-Error.
Thx
User avatar
Demivec
Addict
Addict
Posts: 4259
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

Re: [5.20b] Endless Event-Loop

Post 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()
User avatar
em_uk
Enthusiast
Enthusiast
Posts: 366
Joined: Sun Aug 08, 2010 3:32 pm
Location: Manchester UK

Re: [5.20b] Endless Event-Loop

Post 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()
----

R Tape loading error, 0:1
Post Reply