Wie diese "endlos" Schleife mit ButtonGadget beenden?

Anfängerfragen zum Programmieren mit PureBasic.
Alexherber
Beiträge: 5
Registriert: 06.01.2011 20:06
Computerausstattung: Purebasic 4.51 64 bit
Windows 7 64bit Prof. (programmieren mit PB)
Windows XP (programmieren mit PB)
Debian Lenny
CPU:Intel C2D E6600, MB: ASROCK 4core FullHD 1333,RAM: 6GB Geil
DDR2 800, HD(OS) OCZ Agility 2 E SATA II 2.5 SSD 60GB

Wie diese "endlos" Schleife mit ButtonGadget beenden?

Beitrag 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
!!ROOKIE!! Win7 64 PB 4.51
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

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

Beitrag 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
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Alexherber
Beiträge: 5
Registriert: 06.01.2011 20:06
Computerausstattung: Purebasic 4.51 64 bit
Windows 7 64bit Prof. (programmieren mit PB)
Windows XP (programmieren mit PB)
Debian Lenny
CPU:Intel C2D E6600, MB: ASROCK 4core FullHD 1333,RAM: 6GB Geil
DDR2 800, HD(OS) OCZ Agility 2 E SATA II 2.5 SSD 60GB

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

Beitrag 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?
!!ROOKIE!! Win7 64 PB 4.51
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

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

Beitrag 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
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Alexherber
Beiträge: 5
Registriert: 06.01.2011 20:06
Computerausstattung: Purebasic 4.51 64 bit
Windows 7 64bit Prof. (programmieren mit PB)
Windows XP (programmieren mit PB)
Debian Lenny
CPU:Intel C2D E6600, MB: ASROCK 4core FullHD 1333,RAM: 6GB Geil
DDR2 800, HD(OS) OCZ Agility 2 E SATA II 2.5 SSD 60GB

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

Beitrag 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! :)
!!ROOKIE!! Win7 64 PB 4.51
Antworten