Progressbar an inputabhängigem Sleep ausrichten

  • Hallo zusammen!
    Ich habe ein GUI erstelllt, der beim Drücken von Button1 verschiedene Befehle ausführt.
    Nun kam ich auf die Idee eine Verzögerung einzubauen, deren Länge ich über Input-Felder bestimmen kann. Dies funktioniert auch.
    Nur hätte ich jetzt auch gerne eine Visualisierung, damit ich einschätzen kann wie lange es noch dauert ;)
    D.h. Die Progressbar soll in der eingegebenen Zeit der Input-Felder hochlaufen und bei 0 dann bei 100% sein.
    Aus der Helpfile kann ich mich leider nicht schlauer machen. So funktioniert es leider nicht, was fehlt?

    Spoiler anzeigen
    [autoit]

    ;Eingabefeld für sek einfügen
    $cdis = GUICtrlCreateInput ("sek", 283, 500, 25)

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

    ;Eingabefeld für min einfügen
    $cdim = GUICtrlCreateInput ("min", 258, 500, 25)

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

    ;Verzögerung der Befehlsausführung nach dem Drücken von Button1:
    $sleep = Sleep(GUICtrlRead($cdis)*1000+GUICtrlRead($cdim)*1000*60)

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

    ;Fortschrittsanzeige der Verzögerung nach Drücken von Button1:
    $Progressbar = GUICtrlCreateProgress(10, 560, 480)
    Func Countdown($Progressbar, $sleep, $Msg2, $Button1)
    $Msg2 = GUIGetMsg()
    If $Msg2 = $Button1 Then
    For $k = $sleep To 0
    GUICtrlSetData($Progressbar, $k)
    Next
    EndIf
    EndFunc

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

    Danke schonmal, ist wahrscheinlich nur ne Kleinigkeit... :rolleyes:
    Grüße! Maxore

    2 Mal editiert, zuletzt von Maxore (24. Januar 2010 um 09:23)

  • Versuchs mal mit der Funktion:

    [autoit]

    Func Countdown($Progressbar, $sleep)
    For $k = 0 To 100
    GUICtrlSetData($Progressbar,$sleep/100*$k)
    Sleep($sleep/100)
    Next
    EndFunc

    [/autoit]


    Sollte normal klappen. Du ermittelst erst den Wert von einem Prozent vom Sleep und den fügst du dann immer hinzu.
    Dann mit sleep wieder 1% des Sleeps warten und dann den nächsten Durchlauf.

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Sleep-Progressbar
    [autoit]


    #include <EditConstants.au3>

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

    GUICreate("Progress", 186, 98, 224, 159)
    GUICtrlCreateLabel("Minuten:", 8, 10, 45, 17)
    $cdim = GUICtrlCreateInput("0", 56, 8, 25, 21, $ES_NUMBER)
    GUICtrlCreateLabel("Sekunden:", 96, 10, 56, 17)
    $cdis = GUICtrlCreateInput("5", 152, 8, 25, 21, $ES_NUMBER)
    $Progressbar = GUICtrlCreateProgress(8, 32, 169, 25)
    $Label = GUICtrlCreateLabel("", 8, 64, 36, 17)
    $Button1 = GUICtrlCreateButton("Start", 112, 64, 65, 25)
    GUISetState(@SW_SHOW)

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

    Func Countdown($fProgressbar, $fsleep)
    For $k = 0 To 100
    GUICtrlSetData($fProgressbar,$k)
    GUICtrlSetData($label,$k & "%")
    Sleep($fsleep/100)
    Next
    MsgBox(0,"", "Die Zeit ist abgelaufen. :P")
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $Button1
    $sleep = GUICtrlRead($cdis)*1000+GUICtrlRead($cdim)*1000*60
    Countdown($Progressbar, $Sleep)
    EndSwitch
    WEnd

    [/autoit]

    So, das sollte funktionieren.
    Tut es be mir zumindest. :D
    Bei zu niedrigen Zeiten kann es aber sein,
    dass die Progressbar nicht ganz hinterher
    kommt. Dann kommt der nächste Schritt
    kurz vor dem Ende des "Progresses". ;)


    MfG
    qixx