BugFix Countdown als GUILabel

  • [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>
    #include <GUIConstants.au3>

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

    GUICreate("Verbleibende Zeit",200,200)
    $Time = GUICtrlCreateLabel("",10,10)
    GUISetState (@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Select
    Case $Msg = $GUI_EVENT_CLOSE
    Exit

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

    EndSelect
    WEnd

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

    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
    GUICtrlSetData($Time,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
    GUICtrlSetData($time,$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
    GUICtrlSetData($time,$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
    GUICtrlSetData($time,$message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    EndSelect
    ;~ Until $sec = 0
    EndFunc ;==>_CountDown

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

    AdlibEnable("Count", 1000)

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

    Func Count()
    GUICTRLSetData($Time,_Countdown(_DateDiff("s", _NowCalc(), "2008/06/13 00:00:00"),_DateDiff("n", _NowCalc(), "2008/06/13 00:00:00"),_DateDiff("h", _NowCalc(), "2008/06/13 00:00:00"),_DateDiff("d", _NowCalc(), "2008/06/13 00:00:00")))
    EndFunc

    [/autoit]

    Möchte also den Countdown als Label anzeigen.
    pee hat mir schon etwas geholfen, nur leider geht es immer noch nicht - was ist falsch?

    Vielen Dank schonmal

    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

    Einmal editiert, zuletzt von Waluev (17. Mai 2008 um 14:53)

    • Offizieller Beitrag

    Hi Walle ;)

    Hier:

    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>
    #include <GUIConstants.au3>

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

    GUICreate("Verbleibende Zeit", 200, 200)
    $Time = GUICtrlCreateLabel("", 10, 10,180,20)
    GUISetState(@SW_SHOW)

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

    AdlibEnable("Count", 1000)

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

    While 1
    $Msg = GUIGetMsg()
    Select
    Case $Msg = $GUI_EVENT_CLOSE
    Exit

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

    EndSelect
    WEnd

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

    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
    GUICtrlSetData($Time, 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
    GUICtrlSetData($Time, $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
    GUICtrlSetData($Time, $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
    GUICtrlSetData($Time, $message)
    Else
    GUICtrlSetData($ALTERNATECTRL, $message)
    EndIf
    EndSelect
    ;~ Until $sec = 0
    EndFunc ;==>_CountDown

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

    Func Count()
    _CountDown(_DateDiff("s", _NowCalc(), "2008/06/13 00:00:00"), _DateDiff("n", _NowCalc(), "2008/06/13 00:00:00"), _DateDiff("h", _NowCalc(), "2008/06/13 00:00:00"), _DateDiff("d", _NowCalc(), "2008/06/13 00:00:00"))
    EndFunc ;==>Count

    [/autoit]

    Mfg Spider

  • So ne nette Begrüßung und so tolle hilfe :):):)

    :thumbup: funktioniert

    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Hi! :D
    Oder auch so: (im OnEvent Mode)

    Spoiler anzeigen
    [autoit]

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

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

    OPt("GuiOnEventMode",1)
    GUICreate("Verbleibende Zeit",200,200)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_QUIT")
    $Time = GUICtrlCreateLabel("",10,10,100,40)
    GUISetState (@SW_SHOW)

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

    AdlibEnable(_StartCount())

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

    While 1
    Sleep(100)
    WEnd
    Func _QUIT()
    Exit
    EndFunc

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

    Func _StartCount()
    _Countdown(_DateDiff("s", _NowCalc(), "2008/06/13 00:00:00"),_DateDiff("n", _NowCalc(), "2008/06/13 00:00:00"),_DateDiff("h", _NowCalc(), "2008/06/13 00:00:00"),_DateDiff("d", _NowCalc(), "2008/06/13 00:00:00"),1,$Time)
    AdlibDisable()
    EndFunc

    [/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]
  • Ein Fehler ist mir doch aufgefallen: Die Zeit Stimmt garnicht! Also Stunden Minuten Sekunden und Tage passen nicht..da hat sich das Programm wohl verzählt. Könnt ihr ja mal testen, indem ihr iein Datum eingebt. Die angeblich verbelibende Zeit passt hinten und vorne nicht^^

    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Das liegt daran, dass DateDiff immer die volle Zeitspanne zurückgibt :)
    Also muss man es nur 1x mit Sekunden aufrufen:

    [autoit]

    Func _StartCount()
    _Countdown(_DateDiff("s", _NowCalc(), "2008/06/13 00:00:00"),0,0,0,1,$Time)
    AdlibDisable()
    EndFunc

    [/autoit]
  • Super, jetzt klappt auch das - vielen Dank nochmals

    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.