Für Anfänger: Countdown-Timer

    • Offizieller Beitrag

    Ich dachte mir, wir könnten ja mal ein paar kleine Scripte speziell für die AutoIt-Anfänger schreiben. Diese sollten möglichst gut kommentiert sein, um es den Anfängern leichter zu machen.
    Hier also ein Countdown-Timer:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $iCounterStart = 60 ; hier den Startwert in Sekunden angeben
    $iCounterStart *= 10 ; zum anzeigen der Zehntelsekunden mit 10 multiplizieren
    Global $iCounter = $iCounterStart ; der Countervariable den Startwert zuweisen
    Global $bStartStop = False ; boolesche Variable für Start/Stop Abfrage

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('Countdown-Timer', 600, 100) ; Fenster erstellen (Größe = 600x100 Pixel)
    Global $hProgressbar = GUICtrlCreateProgress(10, 10, 580, 20) ; Progressbar erstellen
    GUICtrlSetData(-1, 100) ; den Wert für die Progressbar auf 100% setzen
    Global $hDisplay = GUICtrlCreateLabel(StringFormat('%.1f', $iCounter / 10) & ' sek.', 20, 40, 60, 20) ; die Sekundenanzeige erstellen
    Global $hReset = GUICtrlCreateButton('Reset', 10, 70, 70, 20) ; "Reset"-Button erstellen
    Global $hStart = GUICtrlCreateButton('Start', 90, 70, 70, 20) ; "Start"-Button erstellen
    GUISetState() ; das Fenster anzeigen
    While True ; Endlosschleife starten
    Switch GUIGetMsg() ; abfragen, ob eine Benutzereingabe erfolgte
    Case $hReset ; wenn der Reset-Button angeklickt wurde
    AdlibDisable() ; die zeitgesteuerte Funktion beenden
    $iCounter = $iCounterStart ; den Counter wieder auf den Startwert setzen
    $bStartStop = False ; die Start/Stop-Variable zurücksetzen
    GUICtrlSetData($hDisplay, StringFormat('%.1f', $iCounter / 10) & ' sek.') ; die Sekundenanzeige stellen
    GUICtrlSetData($hProgressbar, 100) ; Progressbar wieder auf 100%
    GUICtrlSetData($hStart, 'Start') ; den Start-Button wieder mit dem Text "Start" belegen
    GUICtrlSetState($hStart, $GUI_ENABLE) ; den Start-Button wieder freigeben
    Case $hStart ; wenn der Start-Button angeklickt wurde
    $bStartStop = Not $bStartStop ; Start/Stop-Variable invertieren (aus False wird True und umgekehrt)
    Switch $bStartStop ; wenn der Wert der Start/Stop-Variablen...
    Case True ; =True, dann...
    GUICtrlSetData($hStart, 'Pause') ; den Start-Button mit dem Text "Pause" belegen
    AdlibEnable('_Countdown', 100) ; die Funktion "_Countdown" alle 100ms aufrufen
    Case False ; =False, dann...
    GUICtrlSetData($hStart, 'Weiter') ; den Start-Button mit dem Text "Weiter" belegen
    AdlibDisable() ; die zeitgesteuerte Funktion beenden
    EndSwitch
    Case $GUI_EVENT_CLOSE ; wenn der Schließen-Button angeklickt oder [ESC] gedrückt wurde
    Exit ; Programm verlassen
    EndSwitch
    If $iCounter <= 0 Then ; wenn der Counter Null erreicht hat, dann...
    AdlibDisable() ; die zeitgesteuerte Funktion beenden
    $iCounter = 1 ; den Counter auf 1 setzen, damit diese If...Then-Anweisung nur einmal ausgeführt wird
    GUICtrlSetState($hStart, $GUI_DISABLE) ; den Start-Button sperren (reagiert nicht mehr auf Mausklicks)
    MsgBox(0, 'Countdown-Timer', 'Zeit um!') ; Eine Meldung ausgeben
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Countdown()
    $iCounter -= 1 ; den Counterwert um 1 verringern
    GUICtrlSetData($hProgressbar, Int(100 / $iCounterStart * $iCounter)) ; den neuen Wert in der Progressbar anzeigen
    GUICtrlSetData($hDisplay, StringFormat('%.1f', $iCounter / 10) & ' sek.') ; und als Sekundenwert darstellen
    EndFunc ;==>_Countdown

    [/autoit]