BugFix Countdown als GUILabel


  • ;----------------------------------------------------------------------------------------------------------------------
    ; 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 (bugfix@autoit.de)
    ;----------------------------------------------------------------------------------------------------------------------
    #include <Date.au3>
    #include <GUIConstants.au3>




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


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


    EndSelect
    WEnd


    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


    AdlibEnable("Count", 1000)


    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


    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 ()

  • Hi Walle ;)


    Hier:


    Mfg Spider

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

  • 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:
    Func _StartCount()
    _Countdown(_DateDiff("s", _NowCalc(), "2008/06/13 00:00:00"),0,0,0,1,$Time)
    AdlibDisable()
    EndFunc