• Offizieller Beitrag

    Hier meine Version für einen CountDown -Timer.

    Eingabewert: Sekunden, optional: Minuten, Stunden, Tage
    Anzeige: herunterzählend (Standard) oder heraufzählend bis Vorgabezeitraum abgelaufen als ToolTip

    Darstellung:
    05 s
    02:05 min
    01:02:05 h
    03 d, 01:02:05 h

    EDIT 13.08.2007

    Hinzugefügt:
    - Optional kann die Ausgabe statt als ToolTip in ein GUI-Ctrl erfolgen

    Spoiler anzeigen
    [autoit]

    ;----------------------------------------------------------------------------------------------------------------------
    ; Funktion _CountDown($SEC [, $MIN=0 [, $HOUR=0 [, $DAY=0 [, $VISIBLEDOWN=True [, $ALTERNATECTRL='TT']]]]])
    ;
    ; Beschreibung zählt vorgegebene Zeitspanne (Tage, Stunden, Minuten, Sekunden) herunter mit Anzeige Tooltip (Standard)
    ; oder Ausgabe in GUI-Ctrl; wahlweise Anzeige von Restzeit (Standard) oder abgelaufener Zeit
    ;
    ; Parameter $SEC: Sekunden
    ; optional $MIN: Minuten
    ; optional $HOUR: Stunden
    ; optional $DAY: Tage
    ; optional $VISIBLEDOWN: Ansicht (herunterzählen/heraufzählen)
    ; optional $ALTERNATECTRL: GUI-Ctrl in das die Ausgabe mittels GUICtrlSetData() ausgegeben wird
    ;
    ; Erfordernisse #include <Date.au3>
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    #include <Date.au3>
    Func _CountDown($SEC, $MIN=0, $HOUR=0, $DAY=0, $VISIBLEDOWN=True, $ALTERNATECTRL='TT')
    $Sekunden = $SEC + $MIN*60 + $HOUR*3600 + $DAY*86400
    $end = _DateAdd('s', $Sekunden, _NowCalc())
    Local $message
    Do
    Sleep(100)
    $sec = _DateDiff('s', _NowCalc(), $end)
    If Not $VISIBLEDOWN Then
    $secShow = $Sekunden - $sec
    Else
    $secShow = $sec
    EndIf
    Select
    Case $secShow < 60
    If $ALTERNATECTRL = 'TT' Then
    ToolTip(StringFormat('%02u', $secShow) & ' s')
    Else
    GUICtrlSetData($ALTERNATECTRL, StringFormat('%02u', $secShow) & ' s')
    EndIf
    Case $secShow < 60*60
    $message = StringFormat('%02u', Floor($secShow/60)) & ':' & _
    StringFormat('%02u', Mod($secShow,60)) & ' min'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    Case $secShow < 60*60*24
    $message = StringFormat('%02u', Floor($secShow/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod($secShow,3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod($secShow,3600),60)) & ' h'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    Case Else
    $message = Floor($secShow/86400) & ' d / ' & _
    StringFormat('%02u', Floor(Mod($secShow,86400)/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod(Mod($secShow,86400),3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod(Mod($secShow,86400),3600),60)) & ' h'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    EndSelect
    Until $sec = 0
    EndFunc ;==>_CountDown

    [/autoit]
    • Offizieller Beitrag
    Zitat

    Original von sc4ry
    sehr nice

    sowas wollte ich immer basteln, habe es aber nicht geschafft.
    hoffe es ist ok, dass ich es benutze und dafür ein klein wenig modifiziert habe ... für meinen ShutDown-Timer

    Kein Problem, wenns keiner verwenden sollte, würde ich es nicht zeigen. ;)

    (Aber über eine Erwähnung des Autors, würde ich mich schon freuen. :rolleyes: )

  • ist doch nur eine Funktion???
    die musst du aufrufen - alles wichtige steht im Skript also der grüne Text da

    • Offizieller Beitrag

    Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <EditConstants.au3>

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

    Local $sec, $min, $hr, $day
    $gui = GUICreate('CountDown')
    GUICtrlCreateLabel('Tage', 15, 18, 60, 17)
    $iD = GUICtrlCreateInput('', 80, 15, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Stunden', 15, 48, 60, 17)
    $iH = GUICtrlCreateInput('', 80, 45, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Minuten', 15, 78, 60, 17)
    $iM = GUICtrlCreateInput('', 80, 75, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Sekunden', 15, 108, 60, 17)
    $iS = GUICtrlCreateInput('', 80, 105, 20, 20, $ES_NUMBER)
    $bt = GUICtrlCreateButton('Start', 140, 15, 50, 20)
    $iDown = GUICtrlCreateInput('', 200, 15, 80, 20, $ES_READONLY)
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    If $msg = $bt Then
    If GUICtrlRead($iD) = '' Then
    $day = 0
    Else
    $day = GUICtrlRead($iD)
    EndIf
    If GUICtrlRead($iH) = '' Then
    $hr = 0
    Else
    $hr = GUICtrlRead($iH)
    EndIf
    If GUICtrlRead($iM) = '' Then
    $min = 0
    Else
    $min = GUICtrlRead($iM)
    EndIf
    If GUICtrlRead($iS) = '' Then
    $sec = 0
    Else
    $sec = GUICtrlRead($iS)
    EndIf
    _CountDown($sec, $min, $hr, $day, True, $iDown)
    ElseIf $msg = $GUI_EVENT_CLOSE Then
    Exit
    EndIf
    WEnd

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Funktion _CountDown($SEC [, $MIN=0 [, $HOUR=0 [, $DAY=0 [, $VISIBLEDOWN=True [, $ALTERNATECTRL='TT']]]]])
    ;
    ; Beschreibung zählt vorgegebene Zeitspanne (Tage, Stunden, Minuten, Sekunden) herunter mit Anzeige Tooltip (Standard)
    ; oder Ausgabe in GUI-Ctrl; wahlweise Anzeige von Restzeit (Standard) oder abgelaufener Zeit
    ;
    ; Parameter $SEC: Sekunden
    ; optional $MIN: Minuten
    ; optional $HOUR: Stunden
    ; optional $DAY: Tage
    ; optional $VISIBLEDOWN: Ansicht (herunterzählen/heraufzählen)
    ; optional $ALTERNATECTRL: GUI-Ctrl in das die Ausgabe mittels GUICtrlSetData() ausgegeben wird
    ;
    ; Erfordernisse #include <Date.au3>
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    #include <Date.au3>
    Func _CountDown($SEC, $MIN=0, $HOUR=0, $DAY=0, $VISIBLEDOWN=True, $ALTERNATECTRL='TT')
    $Sekunden = $SEC + $MIN*60 + $HOUR*3600 + $DAY*86400
    $end = _DateAdd('s', $Sekunden, _NowCalc())
    Local $message
    Do
    Sleep(100)
    $sec = _DateDiff('s', _NowCalc(), $end)
    If Not $VISIBLEDOWN Then
    $secShow = $Sekunden - $sec
    Else
    $secShow = $sec
    EndIf
    Select
    Case $secShow < 60
    If $ALTERNATECTRL = 'TT' Then
    ToolTip(StringFormat('%02u', $secShow) & ' s')
    Else
    GUICtrlSetData($ALTERNATECTRL, StringFormat('%02u', $secShow) & ' s')
    EndIf
    Case $secShow < 60*60
    $message = StringFormat('%02u', Floor($secShow/60)) & ':' & _
    StringFormat('%02u', Mod($secShow,60)) & ' min'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    Case $secShow < 60*60*24
    $message = StringFormat('%02u', Floor($secShow/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod($secShow,3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod($secShow,3600),60)) & ' h'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    Case Else
    $message = Floor($secShow/86400) & ' d / ' & _
    StringFormat('%02u', Floor(Mod($secShow,86400)/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod(Mod($secShow,86400),3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod(Mod($secShow,86400),3600),60)) & ' h'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    EndSelect
    Until $sec = 0
    EndFunc ;==>_CountDown

    [/autoit]
  • Cool, danke.

    Aber eine Frage hätte ich noch.

    Ich möchte in eine Inidatei das Now bei start reinschreiben.
    Also Jahr Monat Tag Stunde Minute Sekunde.
    Dazu kommt noch die Dauer der Laufzeit in Form von Sekunden.
    Jetzt sollte mir das Praktischerweise nicht beim beenden der Konsole den Counter Stoppen, sondern sich die Zeit merken die es noch zu Laufen hat.Beim Neustart der Konsole sollte es nachsehen ob es noch Laufzeit hat, wenn ja wie lange noch und diese zeit weiterlaufen.
    Wenn nein gleich das Label bringen das es beendet ist.

    Und wie müsste ich das machen wenn ich z.b. 2 Counter in einer Konsole mit unterschiedlichen zeiten brauche ?

    wie könnte ich sowas Bewerkstelligen ?


    Vielen Dank im Voraus

    P.s: Sorry ich weis ich nerve, aber ich bin eifrig am Lernen.
    Habe mir sämtliche hilfen gezogen und Lese und übe wie ein verrückter.
    Schon Ärger mit meiner Frau deswegen :)
    Und hier bei der Arbeit wäre so ein Counter echt nützlich für mich, da ich viel mit Wiedervorlagezeiten Arbeiten muss.

    • Offizieller Beitrag

    Ich werde heute abend mal ein Bsp. stricken. ;)

    Edit:
    Habs mal schnell zusammengebaut - 2 unabhängig voneinander laufende Counter.
    Da AdlinEnable nur einmal gestartet werden kann, mußt du darauf achten, dass für jeden Counter eine Variable existiert, die anzeigt dass er läuft (hier $Count1 und $Count2), dann läßt sich nach Ablauf beider Counter auch AdlibEnable einfach zurücksetzen.
    Die Funktion SetCounter() errechnet bei jedem Aufruf durch AdlibEnable die Restlaufzeit des Counters in Sekunden (Globle Variablen $s1 und $s2) und ruft mit $s1/$s2 die Funktion _FormatSec() auf, deren Rückgabe dann in das entsprechende Control geschrieben wird.
    Dort kannst du $s1/$s2 in eine INI schreiben, wenn das Programm beendet wird. Analog kannst du statt Auslesen der Eingabefelder, die Restzeit aus der INI lesen und mit diesem Wert fortsetzen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <EditConstants.au3>
    #include <Date.au3>

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

    Local $sec, $min, $hr, $day, $sec2, $min2, $hr2, $day2
    Global $end, $start, $Sekunden, $end2, $start2, $Sekunden2, $s1 = 0, $s2 = 0
    Global $Adlib = False, $EndAdlib = 0, $Count1 = False, $Count2 = False
    ;~ Global $INIPath = 'Pfad.INI'

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

    $gui = GUICreate('CountDown')

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

    GUICtrlCreateLabel('Tage', 15, 18, 60, 17)
    $iD = GUICtrlCreateInput('', 80, 15, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Stunden', 15, 48, 60, 17)
    $iH = GUICtrlCreateInput('', 80, 45, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Minuten', 15, 78, 60, 17)
    $iM = GUICtrlCreateInput('', 80, 75, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Sekunden', 15, 108, 60, 17)
    $iS = GUICtrlCreateInput('', 80, 105, 20, 20, $ES_NUMBER)
    $bt = GUICtrlCreateButton('Start', 140, 15, 50, 20)
    $iDown = GUICtrlCreateInput('', 200, 15, 80, 20, $ES_READONLY)

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

    GUICtrlCreateLabel('Tage', 15, 153, 60, 17)
    $iD2 = GUICtrlCreateInput('', 80, 150, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Stunden', 15, 183, 60, 17)
    $iH2 = GUICtrlCreateInput('', 80, 180, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Minuten', 15, 213, 60, 17)
    $iM2 = GUICtrlCreateInput('', 80, 210, 20, 20, $ES_NUMBER)
    GUICtrlCreateLabel('Sekunden', 15, 243, 60, 17)
    $iS2 = GUICtrlCreateInput('', 80, 240, 20, 20, $ES_NUMBER)
    $bt2 = GUICtrlCreateButton('Start', 140, 150, 50, 20)
    $iDown2 = GUICtrlCreateInput('', 200, 150, 80, 20, $ES_READONLY)

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

    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    If $msg = $bt Then
    If GUICtrlRead($iD) = '' Then
    $day = 0
    Else
    $day = GUICtrlRead($iD)
    EndIf
    If GUICtrlRead($iH) = '' Then
    $hr = 0
    Else
    $hr = GUICtrlRead($iH)
    EndIf
    If GUICtrlRead($iM) = '' Then
    $min = 0
    Else
    $min = GUICtrlRead($iM)
    EndIf
    If GUICtrlRead($iS) = '' Then
    $sec = 0
    Else
    $sec = GUICtrlRead($iS)
    EndIf
    $Sekunden = $sec + $min*60 + $hr*3600 + $day*86400
    ; oder Restsekunden aus INI einlesen:
    ; $Sekunden = IniRead($INIPath, 'Restzeit', 'Count1', 0)
    $end = _DateAdd('s', $Sekunden, _NowCalc())
    GUICtrlSetState($bt, $GUI_DISABLE)
    $Count1 = True
    If Not $Adlib Then
    $EndAdlib = 0
    AdlibEnable('SetCounter', 1000)
    $Adlib = True
    EndIf
    If $Count2 Then $EndAdlib = 0 ; wenn anderer Counter läuft, muß Zähler für Ende Null sein
    ElseIf $msg = $bt2 Then
    If GUICtrlRead($iD2) = '' Then
    $day2 = 0
    Else
    $day2 = GUICtrlRead($iD2)
    EndIf
    If GUICtrlRead($iH2) = '' Then
    $hr2 = 0
    Else
    $hr2 = GUICtrlRead($iH2)
    EndIf
    If GUICtrlRead($iM2) = '' Then
    $min2 = 0
    Else
    $min2 = GUICtrlRead($iM2)
    EndIf
    If GUICtrlRead($iS2) = '' Then
    $sec2 = 0
    Else
    $sec2 = GUICtrlRead($iS2)
    EndIf
    $Sekunden2 = $sec2 + $min2*60 + $hr2*3600 + $day2*86400
    ; oder Restsekunden aus INI einlesen:
    ; $Sekunden2 = IniRead($INIPath, 'Restzeit', 'Count2', 0)
    $end2 = _DateAdd('s', $Sekunden2, _NowCalc())
    GUICtrlSetState($bt2, $GUI_DISABLE)
    $Count2 = True
    If Not $Adlib Then
    $EndAdlib = 0
    AdlibEnable('SetCounter', 1000)
    $Adlib = True
    EndIf
    If $Count1 Then $EndAdlib = 0 ; wenn anderer Counter läuft, muß Zähler für Ende Null sein
    ElseIf $msg = $GUI_EVENT_CLOSE Then
    ;~ IniWrite($INIPath, 'Restzeit', 'Count1', $s1)
    ;~ IniWrite($INIPath, 'Restzeit', 'Count2', $s2)
    Exit
    EndIf
    WEnd

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

    Func SetCounter()
    If $Count1 Then
    $s1 = _DateDiff('s', _NowCalc(), $end)
    GUICtrlSetData($iDown, _FormatSec($s1))
    If $s1 = 0 Then
    $EndAdlib += 1
    GUICtrlSetState($bt, $GUI_ENABLE)
    $Count1 = False
    EndIf
    EndIf
    If $Count2 Then
    $s2 = _DateDiff('s', _NowCalc(), $end2)
    GUICtrlSetData($iDown2, _FormatSec($s2))
    If $s2 = 0 Then
    $EndAdlib += 1
    GUICtrlSetState($bt2, $GUI_ENABLE)
    $Count2 = False
    EndIf
    EndIf
    If $EndAdlib = 2 Then
    AdlibDisable() ; beide Counter abgelaufen
    $Adlib = False
    EndIf
    EndFunc

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

    Func _FormatSec($secShow)
    Select
    Case $secShow < 60
    Return StringFormat('%02u', $secShow) & ' s'
    Case $secShow < 60*60
    Return StringFormat('%02u', Floor($secShow/60)) & ':' & _
    StringFormat('%02u', Mod($secShow,60)) & ' min'
    Case $secShow < 60*60*24
    Return StringFormat('%02u', Floor($secShow/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod($secShow,3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod($secShow,3600),60)) & ' h'
    Case Else
    Return Floor($secShow/86400) & ' d / ' & _
    StringFormat('%02u', Floor(Mod($secShow,86400)/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod(Mod($secShow,86400),3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod(Mod($secShow,86400),3600),60)) & ' h'
    EndSelect
    EndFunc

    [/autoit]
  • He, super vielen Herzlichen dank !!

    Und juhu, durch dein letztes Script habe ich endlich kapiert wie das mit den Functionen geht.
    Jetzt sind meine bishergien Laienscripte alle um ca. 60% geschrumpft xD

    Ziehe mir Morgen noch dein Arraytut rein dann werden die meisten wahrscheinlich noch kleiner.

    Thx dir !

    mfg

  • Hiho,

    also da ich jetzt meine Shutdown_Timer damit upgedated habe, stehe ich vor dem Problem, deinen Timer zu pausieren =)
    kann wer dabei behilflich sein?

    trotz pause läuft der timer im hintergrund weiter, was nun in meinen augen logisch erscheint, aber leider bekomme ich es nicht hin, das teil zu stoppen. es müsste theoretisch so sein, dass die uhrzeit, wann der pc runtergefahren werden soll, sich um den zeitraum verschiebt, wie das script pausiert war ...

  • Das ist doch ein hilfreiches Tool !!!

    Vielen Dank.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hi, wirklich super Tool.
    Kann man sehr nützlich sein ^^

    Für die Anfänger und die die sich net so auskennen.
    Hier ein kleines Beispielscript mit Erklärung...

    Öhm i.wie bekomm ich net das richtige Antwortfenster...
    Egal, hier der Code:

    Ah, jetz gehts...

    Spoiler anzeigen
    [autoit]

    ; _______________________________________

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

    #cs
    Kleies Beispiel zur _CountDown Funktion.
    Dürfte für jeden verständlich sein
    #ce

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

    #include <_CountDown.au3>

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

    GUICreate ("", 300, 320) ; Erzeugt ein GUI-Fenster.
    GUISetState (@SW_SHOW) ; Zeigt das GUI-Fenster an.

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

    $Sek = GUICtrlCreateInput ("", 10, 10, 30) ; Erlaubt dem Benutzer die Eingabe von Sekunden.
    GUICtrlCreateLabel ("Sekunden", 50, 13) ; Label
    $Min = GUICtrlCreateInput ("", 10, 40, 30) ; Erlaubt dem Benutzer die Eingabe von Minuten.
    GUICtrlCreateLabel ("Minuten", 50, 43) ; Label
    $Hour = GUICtrlCreateInput ("", 10, 70, 30) ; Erlaubt dem Benutzer die Eingabe von Stunden.
    GUICtrlCreateLabel ("Stunden", 50, 73) ; Label
    $Day = GUICtrlCreateInput ("", 10, 100, 30) ; Erlaubt dem Benutzer die Eingabe von Tagen.
    GUICtrlCreateLabel ("Tage", 50, 103) ; Label
    $Up = GUICtrlCreateButton ("Hochzählen", 10, 140, 120) ; Button um den Zähler hochzählen zu lassen.
    $Down = GUICtrlCreateButton ("Runterzählen", 130, 140, 120) ; Button um den Zähler runterzählen zu lassen.
    $Exit = GUICtrlCreateButton ("Exit", 250, 140, 40) ; Exit Button.

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

    While 1
    $Msg = GUIGetMsg ()
    Select
    Case $Msg = $Up
    GUICtrlDelete ($Up) ; Löscht den Button $Up.
    GUICtrlDelete ($Down) ; Löscht den Button $Down.
    $SekRead = GUICtrlRead ($Sek, 1) ; Liest den Wert von $Sek aus.
    $MinRead = GUICtrlRead ($Min, 1) ; Liest den Wert von $Min aus.
    $HourRead = GUICtrlRead ($Hour, 1) ; Liest den Wert von $Hour aus.
    $DayRead = GUICtrlRead ($Day, 1) ; Liest den Wert von $Day aus.
    $view = GUICtrlCreateLabel (" ", 10, 200, 200) ; Das Label, in das der Zähler angezeigt werden soll.
    _CountDown ($SekRead, $MinRead, $HourRead, $DayRead, False, $view) ; Die Countdown Funktion.
    Case $Msg = $Down
    GUICtrlDelete ($Up) ; Löscht den Button $Up.
    GUICtrlDelete ($Down) ; Löscht den Button $Down.
    $SekRead = GUICtrlRead ($Sek, 1) ; Liest den Wert von $Sek aus.
    $MinRead = GUICtrlRead ($Min, 1) ; Liest den Wert von $Min aus.
    $HourRead = GUICtrlRead ($Hour, 1) ; Liest den Wert von $Hour aus.
    $DayRead = GUICtrlRead ($Day, 1) ; Liest den Wert von $Day aus.
    $view = GUICtrlCreateLabel (" ", 10, 200, 200) ; Das Label, in das der Zähler angezeigt werden soll.
    _CountDown ($SekRead, $MinRead, $HourRead, $DayRead, True, $view) ; Die Countdown Funktion.
    Case $Msg = $Exit
    Exit ; Schließt das Programm.
    EndSelect
    WEnd

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

    ; __________________________________________

    [/autoit]

    Lol, das seh ich ja eben erst, warum kannman mit Exit denn hier net beenden, wenn der Timer läuft?
    Einer ne antwort? "."

    2 Mal editiert, zuletzt von Commander21 (9. März 2009 um 16:32)

  • hallo,
    ich habe den countdown in meine gui eingebunden.. klappt auch alles, ABER wenn ich den counter gestartet habe, kann ich keine buttons mehr drücken weil der button zum start des counters aktiv ist... wie komme ich da raus, damit ich die anderen knöpfe wieder drücken kann, aber ohne das der counter aufhört.
    das ist genauso wie commander21 sagt... der exitbutton geht bei ihm auch nicht wenn er den counter gestartet hat...

  • hier mal ein beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Local $sec, $min, $hr, $day
    $Form1_1 = GUICreate("Form1", 453, 348, 243, 135)
    $Button1 = GUICtrlCreateButton("start iwas anderes", 32, 168, 143, 34, 0)
    $bt = GUICtrlCreateButton("GO", 184, 304, 25, 17, 0)
    $Label1 = GUICtrlCreateLabel("Tage", 104, 232, 36, 17)
    $iD = GUICtrlCreateInput('', 152, 232, 25, 21, $ES_NUMBER)
    GUICtrlCreateLabel('Stunden', 104, 256, 36, 17)
    $iH = GUICtrlCreateInput('', 152, 256, 25, 21, $ES_NUMBER)
    GUICtrlCreateLabel('Minuten', 104, 280, 36, 17)
    $iM = GUICtrlCreateInput('', 152, 280, 25, 21, $ES_NUMBER)
    GUICtrlCreateLabel('Sekunden', 104, 304, 36, 17)
    $iS = GUICtrlCreateInput('', 152, 304, 25, 21, $ES_NUMBER)

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

    $iDown = GUICtrlCreateInput('', 376, 120, 49, 21, $ES_READONLY)
    GUISetState(@SW_SHOW)

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

    While True
    $msg = GUIGetMsg()
    Switch $msg

    Case $Button1
    MsgBox (1,"Test","Button funktioniert")
    EndSwitch
    If $msg = $bt Then
    If GUICtrlRead($iD) = '' Then
    $day = 0
    Else
    $day = GUICtrlRead($iD)
    EndIf
    If GUICtrlRead($iH) = '' Then
    $hr = 0
    Else
    $hr = GUICtrlRead($iH)
    EndIf
    If GUICtrlRead($iM) = '' Then
    $min = 0
    Else
    $min = GUICtrlRead($iM)
    EndIf
    If GUICtrlRead($iS) = '' Then
    $sec = 0
    Else
    $sec = GUICtrlRead($iS)
    EndIf
    _CountDown($sec, $min, $hr, $day, True, $iDown)
    ElseIf $msg = $GUI_EVENT_CLOSE Then
    Exit
    EndIf

    WEnd

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Funktion _CountDown($SEC [, $MIN=0 [, $HOUR=0 [, $DAY=0 [, $VISIBLEDOWN=True [, $ALTERNATECTRL='TT']]]]])
    ;
    ; Beschreibung zählt vorgegebene Zeitspanne (Tage, Stunden, Minuten, Sekunden) herunter mit Anzeige Tooltip (Standard)
    ; oder Ausgabe in GUI-Ctrl; wahlweise Anzeige von Restzeit (Standard) oder abgelaufener Zeit
    ;
    ; Parameter $SEC: Sekunden
    ; optional $MIN: Minuten
    ; optional $HOUR: Stunden
    ; optional $DAY: Tage
    ; optional $VISIBLEDOWN: Ansicht (herunterzählen/heraufzählen)
    ; optional $ALTERNATECTRL: GUI-Ctrl in das die Ausgabe mittels GUICtrlSetData() ausgegeben wird
    ;
    ; Erfordernisse #include <Date.au3>
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    #include <Date.au3>
    Func _CountDown($SEC, $MIN=0, $HOUR=0, $DAY=0, $VISIBLEDOWN=True, $ALTERNATECTRL='TT')
    $Sekunden = $SEC + $MIN*60 + $HOUR*3600 + $DAY*86400
    $end = _DateAdd('s', $Sekunden, _NowCalc())
    Local $message
    Do
    Sleep(100)
    $sec = _DateDiff('s', _NowCalc(), $end)
    If Not $VISIBLEDOWN Then
    $secShow = $Sekunden - $sec
    Else
    $secShow = $sec
    EndIf
    Select
    Case $secShow < 60
    If $ALTERNATECTRL = 'TT' Then
    ToolTip(StringFormat('%02u', $secShow) & ' s')
    Else
    GUICtrlSetData($ALTERNATECTRL, StringFormat('%02u', $secShow) & ' s')
    EndIf
    Case $secShow < 60*60
    $message = StringFormat('%02u', Floor($secShow/60)) & ':' & _
    StringFormat('%02u', Mod($secShow,60)) & ' min'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    Case $secShow < 60*60*24
    $message = StringFormat('%02u', Floor($secShow/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod($secShow,3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod($secShow,3600),60)) & ' h'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    Case Else
    $message = Floor($secShow/86400) & ' d / ' & _
    StringFormat('%02u', Floor(Mod($secShow,86400)/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod(Mod($secShow,86400),3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod(Mod($secShow,86400),3600),60)) & ' h'
    If $ALTERNATECTRL = 'TT' Then
    ToolTip($message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    EndSelect
    Until $sec = 0
    EndFunc;==>_CountDown

    [/autoit]

    Einmal editiert, zuletzt von Executor87 (3. Juni 2009 um 12:41)

  • Um ehrlich zu sein hab ich mir den Thread nich so wirklich durchgeschaut aber das liegt an der EndlosSchleife im Script.. wofür gibts _Timer_SetTimer oder AdlibEnable ? ;P