Seite 1 von 1

Wie diese "endlos" Schleife mit ButtonGadget beenden?

Verfasst: 16.01.2011 22:18
von Alexherber
Hallo, vielleicht kann mir jemand bei meinem Problem helfen.
Ich habe einen kleinen Countdown geschrieben der alle 5 Sekunden
eine Meldung ausgibt, dazu einen Start und einen Stop Knopf.

Mein Problem ist ich bringe den Countdown nicht dazu
mit dem Stop Knopf zu stoppen, er lässt sich durch
die "endlos" Schleife wohl erst gar nicht aktivieren.
Ich schaffe es nur das Programm komplett zu beenden.
Wie Kann ich den Stop Knopf "funktionsfähig" machen?

Code: Alles auswählen

#WindowWidth  = 450
#WindowHeight = 390
msga$ = "5 sekunden um"
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "Test", #PB_Window_MinimizeGadget)
  Top = 10
  GadgetHeight = 20
  StringGadget(0,  40, #WindowHeight-350, 200, GadgetHeight, "gestoppt!")
  ButtonGadget(1, 243, #WindowHeight-350,  72, GadgetHeight, "Start")
  ButtonGadget(2, 315, #WindowHeight-350,  72, GadgetHeight, "Stop")  
  DisableGadget(2,1)
  ListViewGadget(3,  40, #WindowHeight-290, 270, 150)
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
   
        Case 1 
          DisableGadget(2,0)  
          DisableGadget(1,1)  
          SetGadgetText(0, "gestartet" )
          AddWindowTimer(0, 01, 5000)   
          
          
          Repeat ;***********************************hier der Anfang der Schleife
         
            Event = WaitWindowEvent()
              If Event = #PB_Event_Timer And EventTimer() = 01
              AddGadgetItem(3, -1, msga$)
              EndIf

          Until  Event = #PB_Event_CloseWindow;*************************hier das Ende der Schleife
        Case 2 
          DisableGadget(1,0)  
          DisableGadget(2,1)  
          SetGadgetText(0, "Countdown gestoppt!" )
;*****************************************************hier soll die Schleife beendet werden
      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
EndIf
End 
Mfg, Alex

Re: Wie diese "endlos" Schleife mit ButtonGadget beenden?

Verfasst: 16.01.2011 22:32
von Pelagio
Hallo Alexherber,

Deine Timerabfrage gehört mit zur Hauptschleife.
Lese Dir noch einmal die Hilfe etwas genauer durch, so wirst DU sicherlich es noch genauer verstehen.

Code: Alles auswählen

#WindowWidth  = 450
#WindowHeight = 390
msga$ = "5 sekunden um"
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "Test", #PB_Window_MinimizeGadget)
  Top = 10
  GadgetHeight = 20
  StringGadget(0,  40, #WindowHeight-350, 200, GadgetHeight, "gestoppt!")
  ButtonGadget(1, 243, #WindowHeight-350,  72, GadgetHeight, "Start")
  ButtonGadget(2, 315, #WindowHeight-350,  72, GadgetHeight, "Stop")  
  DisableGadget(2,1)
  ListViewGadget(3,  40, #WindowHeight-290, 270, 150)
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 1 
          DisableGadget(2,0)  
          DisableGadget(1,1)  
          SetGadgetText(0, "gestartet" )
          AddWindowTimer(0, 01, 5000)   
        Case 2 
          DisableGadget(1,0)  
          DisableGadget(2,1)
          RemoveWindowTimer(0, 1)
          SetGadgetText(0, "Countdown gestoppt!" )
      EndSelect
   ElseIf EventID = #PB_Event_Timer And EventTimer() = 1
      AddGadgetItem(3, -1, msga$)
   EndIf
   
  Until EventID = #PB_Event_CloseWindow
EndIf
End

Re: Wie diese "endlos" Schleife mit ButtonGadget beenden?

Verfasst: 17.01.2011 17:44
von Alexherber
Hallo Pelagio,
vielen Dank, genau so sollte das Ergebniss aussehen.
Das Problem mit den Schleifen in meinem Code sehe ich jetzt.
Ich habe den Aufbau noch nicht ganz verstanden richtig.
Als ich endlich kapiert hab warum das ElseIf in deinem Code unten so funktioniert
und so da steht ist mir der Fehler in meinem Aufbau auch klargeworden.
Meine Grundlegender Fehler waren also:

1. die 2. Repeat Schleife zu erstellen
2. die ebenfalls doppelte If Bedingung für den Timer zu erstellen
und nicht gleicht mit ElseIf abzufragen (an der richtigen Stelle nach den Case xx).

Wäre ich die Schleifen Schritt für Schritt sorgfältig durchgegangen hätte ich zumindest merken
müssen dass zumindest daran etwas nicht stimmen kann und wäre einer Lösung wohl näher gekommen.
Kann man das so sagen?

Re: Wie diese "endlos" Schleife mit ButtonGadget beenden?

Verfasst: 18.01.2011 14:00
von Pelagio
@Alexherber

Im Großen und Ganzen hast Du es richtig erkannt. Allerdings solltest Du nicht zu viel über IF und ELSEIF in deinem Code grübeln ich z.B. hätte statt der IF-Schleife eine SELECT-Schleife benutzt.

Code: Alles auswählen

 #WindowWidth  = 450
#WindowHeight = 390
msga$ = "5 sekunden um"
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
   Top = 10
   GadgetHeight = 20
   StringGadget(0,  40, #WindowHeight-350, 200, GadgetHeight, "gestoppt!")
   ButtonGadget(1, 243, #WindowHeight-350,  72, GadgetHeight, "Start")
   ButtonGadget(2, 315, #WindowHeight-350,  72, GadgetHeight, "Stop")  
   DisableGadget(2,1)
   ListViewGadget(3,  40, #WindowHeight-290, 270, 150)
   Repeat
      EventID = WaitWindowEvent()
      Select EventID 
         Case #PB_Event_Gadget
            Select EventGadget()
               Case 1 
                  DisableGadget(2,0)  
                  DisableGadget(1,1)  
                  SetGadgetText(0, "gestartet" )
                  AddWindowTimer(0, 01, 5000)   
               Case 2 
                  DisableGadget(1,0)  
                  DisableGadget(2,1)
                  RemoveWindowTimer(0, 1)
                  SetGadgetText(0, "Countdown gestoppt!" )
            EndSelect
         Case #PB_Event_Timer
            AddGadgetItem(3, -1, msga$)
      EndSelect
   Until EventID = #PB_Event_CloseWindow
EndIf
End

Re: Wie diese "endlos" Schleife mit ButtonGadget beenden?

Verfasst: 20.01.2011 20:18
von Alexherber
Hi Pelagio, vielen dank für den Hinweis mit Case,
das sieht so wesentlich eleganter aus und ist einfacher zu verstehen.
Vielen Dank für deinen Zeitaufwand, hat mir bei meinen Anfängen sehr geholfen! :)