Countdown in GUI...

  • Hallo,

    ich möchte in einer GUI einen Label mit einem Countdown in Sekunden von, sagen wir 20 auf 0 darstellen !

    So in etwa:

    [autoit]

    "Sie haben noch " & $Countdown_sec & " sek. Zeit bis das Fenster sich schließt..."

    [/autoit]


    Wie bekomme ich das hin ???


    Gruß
    Greenhorn


    • Offizieller Beitrag

    Hallo

    so ungefair?

    [autoit]

    #include <GUIConstants.au3>

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

    GUICreate("", 300, 37,-1,-1,$WS_POPUP)
    $Label = GUICtrlCreateLabel("Sie haben noch 20 sekunden bis sich das fenster schließt...", 10, 10)
    GUISetState()

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

    For $i = 20 To 0 Step -1
    GUICtrlSetData($Label,"Sie haben noch "&$i&" sekunden bis sich das fenster schließt...")
    Sleep(1000)
    Next
    Exit

    [/autoit]

    Mfg Spider

  • Vielen Dank gtaspider,

    as habe ich auch schon probiert, aber wenn ich Sleep in meine GUI einbaue dann "schläft meine GUI ja, es sollen aber noch auswahlen möglich sein...

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>

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

    $GUI_Start = @SEC

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

    GuiCreate("Zu guter Letzt...", 370, 311,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

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

    $Radio_2 = GuiCtrlCreateRadio("Ja, das war gar nicht so schlecht...", 50, 130, 270, 20)
    $Radio_3 = GuiCtrlCreateRadio("Nein, danke...", 50, 190, 270, 20)
    GUICtrlSetState($Radio_3, $GUI_CHECKED)
    $Button_6 = GuiCtrlCreateButton("OK", 260, 240, 80, 30)
    $Button_7 = GuiCtrlCreateButton("Beenden", 30, 240, 80, 30)

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

    GuiSetState()

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

    For $i = 20 To 0 Step - 1
    $Label = GUICtrlCreateLabel("Sie haben noch 20 sekunden bis sich das fenster schließt...", 10, 10)
    Sleep(1000)
    $msg = GuiGetMsg()
    Select

    Case $msg = $Button_6
    If GUICtrlGetState($Radio_2) = $GUI_CHECKED Then
    Run("BspMusik.exe")
    Else
    ExitLoop
    EndIf
    Case $msg = $Button_7
    ExitLoop
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    Next
    Exit

    [/autoit]

    ??? :irre:


    Einmal editiert, zuletzt von Greenhorn (14. März 2007 um 22:46)

  • Hi,
    vielleicht wäre das eine Lösung:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    dim $TimeOut=20
    AdlibEnable("LabelTimer",1000)
    $GUI_Start = @SEC

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

    GuiCreate("Zu guter Letzt...", 370, 311,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

    $Radio_2 = GuiCtrlCreateRadio("Ja, das war gar nicht so schlecht...", 50, 130, 270, 20)
    $Radio_3 = GuiCtrlCreateRadio("Nein, danke...", 50, 190, 270, 20)
    GUICtrlSetState($Radio_3, $GUI_CHECKED)
    $Button_6 = GuiCtrlCreateButton("OK", 260, 240, 80, 30)
    $Button_7 = GuiCtrlCreateButton("Beenden", 30, 240, 80, 30)
    $Label = GUICtrlCreateLabel("Sie haben noch 20 sekunden bis sich das fenster schließt...", 10, 10)
    GuiSetState()
    while 1
    $msg = GuiGetMsg()
    Select

    Case $msg = $Button_6
    If GUICtrlGetState($Radio_2) = $GUI_CHECKED Then
    Run("BspMusik.exe")
    Else
    ExitLoop
    EndIf
    Case $msg = $Button_7
    ExitLoop
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect


    WEnd

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

    Func LabelTimer()
    $TimeOut-=1
    GUICtrlSetData($Label,"Sie haben noch "& $TimeOut&" sekunden bis sich das fenster schließt...")
    if $TimeOut=0 Then
    AdlibDisable()
    Exit
    EndIf
    EndFunc

    [/autoit]


    Gruss
    eddy_erpel

  • Nun, der Zweck ist einfach nur eine optische Anzeige der Restzeit bis das Auswahlfenster schließt.

    Ein Fenster geht auf, mit einem Auswhlmenü (Radio) und zwei Button -> einer zum Bestätigen & einer zum Beenden/Abbrechen.
    Das war's mehr eigentlich nicht.

    In anderen Anwendungen wie Nero oder WinRAR wird's ja auch angezeigt und ich habe trotzdem noch Kontrolle über die GUI (meistens jedenfalls, hihi)...

    Kann man nicht eine Schleife benutzen, die auf @SEC das Label aktualisiert, oder die GUI neu aufbaut ?
    Den Rest kann man dan mit Mathe machen, denke ich

    Versuche gerade so etwas...

    Spoiler anzeigen
    [autoit]

    $T = @SEC
    Sleep(1000)
    For $i = 1 To 20
    If @SEC = ($T+1) Then

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

    $2 = @SEC - (@SEC+20)
    $3 = $2-($2+$2)
    ;SplashTextOn("Title", $3, -1, -1, -1, -1, 4, "", 24)
    MsgBox(0, "", $3)
    ElseIf ($T+$i) = ($T+20) Then
    Exit
    EndIf
    $T = @SEC
    Next

    [/autoit]

    Mein mathematisches Genie ist unverkennbar, nicht ? :rofl:


    Irgendwie muss das doch... :irre:


  • Bitteschön ;)

    [autoit]

    #include <GUIConstants.au3>

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

    $Part1 = "Du hast noch "
    $Part2 = " Sekunden."
    $Counter = 20

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

    AdlibEnable("CountDown", 1000)

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

    GUICreate("Zeit-Test", 160, 80)
    $CounterLabel = GUICtrlCreateLabel($Part1 & $Counter & $Part2, 10, 20, 160)
    $ButtonTest = GUICtrlCreateButton("Drück mich!", 50, 45, 100)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $ButtonTest
    MsgBox(0, "Autsch!", "Du hast mich gedrückt!")
    EndSelect
    WEnd

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

    Func CountDown()
    $Counter = $Counter - 1
    GUICtrlSetData($CounterLabel, $Part1 & $Counter & $Part2)
    If Not $Counter Then
    AdlibDisable()
    GUIDelete()
    Exit
    EndIf
    EndFunc

    [/autoit]

    Viel Spaß damit...

  • Vielen Dank für die Tips, Leute ! :klatschen:

    Jan's Script funktioniert hervorragend, deinen Tip, pee, werde ich noch austesten, da hast Du mich neugierig gemacht...

    Sehe das Thema erst mal als gelöst an...


    Greetz@all-au3Freax ;)


  • Man lernt doch immer wieder dazu.........

    Ich habe das bisher immer so gelöst und frage mich jetzt welche Lösung geht sparsamer mit der CPU um?

    Zumindest steht bei 'AdlibEnable ' man soll es sparsam verwenden.

    Viele Grüße
    Carsten

    [autoit]


    #include <GUIConstants.au3>

    $Part1 = "Du hast noch "
    $Part2 = " Sekunden."
    $Counter = 20

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

    ; **** INAKTIV *****
    ;AdlibEnable("CountDown", 1000)

    GUICreate("Zeit-Test", 160, 80)
    $CounterLabel = GUICtrlCreateLabel($Part1 & $Counter & $Part2, 10, 20, 160)
    $ButtonTest = GUICtrlCreateButton("Drück mich!", 50, 45, 100)
    GUISetState(@SW_SHOW)

    $zeitzaehler = TimerInit()
    While 1
    $msg = GUIGetMsg()

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $ButtonTest
    MsgBox(0, "Autsch!", "Du hast mich gedrückt!")

    ; ***** HIER Ersatz für Adlib.... ****
    case Else
    if TimerDiff($zeitzaehler) > 1000 Then
    CountDown()
    $zeitzaehler = TimerInit()
    EndIf

    EndSelect
    WEnd



    Func CountDown()
    $Counter = $Counter - 1 ; **** NOCH GENAUER wäre wohl die PC-Sekunden
    ; zu verwenden, aber bei 20 Sec. wohl unwichtig...
    GUICtrlSetData($CounterLabel, $Part1 & $Counter & $Part2)
    If Not $Counter Then
    AdlibDisable()
    GUIDelete()
    Exit
    EndIf
    EndFunc

    [/autoit]