Uhrzeit und Countdown

  • Hallo Community,

    ich möchte z.Z. ein kleines Script erstellen, welches einen winzigen GUI beinhaltet.
    Darin soll die Aktuelle Uhrzeit + ein Countdown enthalten sein. (Der Countdown soll alle 2 Stunden runterzählen -> Er fängt um 0 Uhr an und zählt dann 1h:59m:59sec runter. Danach soll er 59m:59sec runterzählen, sobald das geschehen ist, soll das ganze wieder von vorne anfangen). Die Zeiten sollen am besten aus einer *.ini gelesen werden, falls die Zeiten sich mal ändern.

    Nun zu meinem ersten Problem, die Uhrzeit habe ich ausgelesen & ausgegeben - sie soll sich aber jede Sekunde aktualisieren.

    [autoit]

    Local $uhrzeit= _NowTime()
    $clock = GUICtrlCreateLabel("Uhrzeit: " & $uhrzeit, 8, 8, 137, 17)

    [/autoit]

    Wie kann ich den GUI dazu bringen $uhrzeit aktuell zu halten?

    PS: Das ganze sieht zurzeit so aus:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>

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

    Local $uhrzeit= _NowTime()
    #Region ### START Koda GUI section ### Form=
    $MainGui = GUICreate("Uhrzeit und CD", 400, 33, 150, 150)
    $clock = GUICtrlCreateLabel("Uhrzeit: " & $uhrzeit, 8, 8, 137, 17)
    $dungeonzeit = GUICtrlCreateLabel("Countdown", 152, 8, 78, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Grüße.

    PS: Ist es normal das Opera beim bearbeiten eines Post's abstürzt (wenn dieser AI Source enthält)?

    2 Mal editiert, zuletzt von Juloko (7. September 2010 um 18:54)

  • Meinst du so ?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>

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

    AdlibRegister("tick", 1000)
    #Region ### START Koda GUI section ### Form=
    $MainGui = GUICreate("Uhrzeit und CD", 400, 33, 150, 150)
    $clock = GUICtrlCreateLabel("Uhrzeit: ", 8, 8, 137, 17)
    $dungeonzeit = GUICtrlCreateLabel("Countdown", 152, 8, 78, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func tick()
    GUICtrlSetData($clock, "Uhrzeit: " & _NowTime())
    EndFunc

    [/autoit]

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Mhm, ja genau das wars, dankeschön.

    Welche Funktion hat diese "Func" genau? Wäre jemand so nett und würde mir das in einem Satz erklären?

    [autoit]


    Func tick()
    GUICtrlSetData($clock, "Uhrzeit: " & _NowTime())
    EndFunc

    [/autoit]

    Jetzt müsste ich noch einen Countdown erstellen, das grundlegende versuche ich erstmal selber zu machen. Falls ich schwierigkeiten haben sollte, melde ich mich nochtmal.

    Grüße.

  • zu 1. Die FUnktion ist das was du brauchtest
    sie aktuellisiert die Uhrzeit dauerhaft.

    zu 2. hast glück hab mal gekramt und meinen alten counter gefunden
    hab ihn für dich abgeändert:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>

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

    AdlibRegister("tick", 1000)
    AdlibRegister("count", 1000)
    #Region ### START Koda GUI section ### Form=
    $MainGui = GUICreate("Uhrzeit und CD", 400, 33, 150, 150)
    $clock = GUICtrlCreateLabel("Uhrzeit: ", 8, 8, 137, 17)
    $dungeonzeit = GUICtrlCreateLabel("Countdown", 152, 8, 78, 17)
    $std = GUICtrlCreateLabel("0", 250, 8, 12, 17) ;<--- startzeit für stunden
    GUICtrlCreateLabel(":", 262, 7, 5, 17)
    $min = GUICtrlCreateLabel("0", 265, 8, 12, 17) ;<---- startzeit für minuten
    GUICtrlCreateLabel(":", 277, 7, 5, 17)
    $sec = GUICtrlCreateLabel("10", 280, 8, 12, 17) ;<---- startzeit für sekunden
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func tick()
    GUICtrlSetData($clock, "Uhrzeit: " & _NowTime())
    EndFunc

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

    Func count()
    If GUICtrlRead($sec) = "0" And GUICtrlRead($min) ="0" And GUICtrlRead($std) = "0" Then
    GUICtrlSetData($sec, "0")
    GUICtrlSetData($min, "0")
    GUICtrlSetData($std, "2")
    Else
    EndIf
    If GUICtrlRead($sec) = "0" Then
    GUICtrlSetData($sec, "59")
    If GUICtrlRead($min) = "0" Then
    GUICtrlSetData($min, "59")
    GUICtrlSetData($std, GUICtrlRead($std) - 1)
    Else
    GUICtrlSetData($min, GUICtrlRead($min) - 1)
    EndIf
    Else
    GUICtrlSetData($sec, GUICtrlRead($sec) - 1)
    EndIf
    EndFunc

    [/autoit]

    Ich hoffe er geht so grob in deine Wunsch richtung ;)

    Edit: Der Counter stellt sich nach ablauf auf 2 std wieder ein.

  • Hey ophiel,

    ah, das bringt mich schon ein ganzes Stück weiter.
    Der Counter muss sich allerdings nach der Uhrzeit richten (wenn ich das Script um 15:35 Uhr starte soll der Counter bereits laufen).
    Ich werde versuchen den Counter erstmal selber zu erstellen und die Werte aus einer *.ini nehmen.

    Grüße.

  • Hallo,

    ich habe in einer Config verschiedene Zeiten gespeichert.
    Kann ich bei _NowTime Zeiten Addieren?
    Sozusagen dann

    [autoit]

    _NowTime(5)+03:45:39

    [/autoit]

    Ich würde nähmlich gerne einen Countdown erstellen.
    Dieser soll bis zu einer bestimmten Zeit runterzählen (sagen wir, es ist 15 Uhr, und ich möchte das der CD eine Stunde runterzählt, am besten mit Stunden, Minuten und Sekunden). Wenn es dann 16 Uhr ist läuft er dann Positiv weiter. Das dürfte normalerweise eine relativ einfach Divisionsaufgabe sein. Ich bekomm es aber nicht hin...

    Grüße.


  • Hey autoBert,
    ne, der ist erstmal an den haken gehängt xD
    Ich spiele derzeit ein Rollenspiel wo alle 3 Stunden ein kleines Event ist, das Script soll mich daran errinern. Es soll mir bescheid geben wieviel Zeit ich noch bis zum Event habe - wenn es angefangen ist - wie lange das Event noch geht. Dann das ganze wieder von vorne. Die Zeiten würd ich gerne aus einer *.ini auslesen.

    Danke für den Tipp mit dem _DateAdd, ich habe mich da jetzt ein wenig in die Deutsche Hilfe eingelesen - ist sehr informativ!
    Wäre es aber nicht besser wenn ich statt _DateAdd _DateDiff verwende? So Rechne ich dann aus wie lange es noch zum Event dauert (wenn möglich zählt er im Negativen bereich solange, bis er bei 0 angekommen ist > nächster CD startet).

    Grüße.

  • Hallo juloko,

    Wäre es aber nicht besser wenn ich statt _DateAdd _DateDiff verwende? So Rechne ich dann aus wie lange es noch zum Event dauert


    die Frage beantwortet sich wohl selbst um die Differnz zu ermitteln eignet sich _DateDiff besser, _DateAdd gibt ja eine absolute Zeitangabe zurück. Wenn du aber in deiner Ini absolute Zeiteingaben führst braucht du nichts mehr berechnen sondern nur noch vergleichen, dazu müssen aber die Datumsformate in diesem Schema yyyy/mm/dd HH:mm:ss vorliegen.

    Edit: hier ein kleines Beispiel-Skript um Zeitangaben zu vergleichen (ohne INI)

    Spoiler anzeigen
    [autoit]


    #include <StaticConstants.au3>
    #include <date.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include<WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    Global $sTitel = 'Beispiel um Zeiten zu vergleichen'

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

    Local $hMainGui = GUICreate($sTitel, 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    ;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $hMainGui gespeichert
    ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    ;Verknüpft dem Event $Gui_Event_Close mit der Funktion _End

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

    ;Menübar anzeigen
    Global $menu_help = GUICtrlCreateMenu("?", -1, 1)
    Global $item_help_auto = GUICtrlCreateMenuItem("Autor: (Auto)Bert", $menu_help)
    Global $item_help_exit = GUICtrlCreateMenuItem("Beenden", $menu_help)
    GUICtrlSetOnEvent(-1, '_End')

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

    Local $hedtFrom = GUICtrlCreateDate("01/01/2009 18:45:56", 20, 10, 175, 25, $DTS_UPDOWN)
    ;erzeugt ein From Steuerelement die zurückgegebene ID wird in der Variablen $hedtFrom gespeichert
    Local $DTM_SETFORMAT_ = 0x1032
    Local $style = "dd/MM/yyyy HH:mm:ss"
    GUICtrlSendMsg($hedtFrom, $DTM_SETFORMAT_, 0, $style)
    GUICtrlSetFont(-1, 12)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
    ;verankert das From Steuerelement Links, rechts, oben und fixiert die Höhe
    ;beim Resizen bleibt es dadurch auf seiner Position und ändert nur die Breite
    Local $hedtTo = GUICtrlCreateDate("01.01.2009", 20, 40, 175, 25, $DTS_UPDOWN)
    ;erzeugt ein To Steuerelement die zurückgegebene ID wird in der Variablen $hedtTo gespeichert
    GUICtrlSendMsg($hedtTo, $DTM_SETFORMAT_, 0, $style)
    GUICtrlSetFont(-1, 12)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
    ;verankert das To Steuerelement Links, rechts, oben und fixiert die Höhe
    ;beim Resizen bleibt es dadurch auf seiner Position und ändert nur die Breite

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

    GUICtrlCreateButton('&prüfen', 220, 10, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    ;verankert den Button "Prüfen" rechts und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_CheckDate')
    ;Beim Klicken des Buttons wird die Funktion _CheckTime aufgerufen

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

    Local $hlblErgebnis = GUICtrlCreateLabel("hier steht danach das Ergebnis", 12, 80, 200,200)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert das Label links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    GUICtrlCreateButton('Be&enden', 220, 115, 150, 25)
    GUICtrlSetOnEvent(-1, '_END')
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)

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

    GUICtrlCreateGraphic(0, 230, 400, 2, $SS_BLACKRECT)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM)
    Global $hStatus = GUICtrlCreateLabel("", 5, 235, 400, 25)

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

    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM)
    ;verankert das Label Links, rechts und unten; fixiert die Höhe
    ;beim Resizen bleibt es dadurch auf seiner Position und ändert nur die Breite wird angepasst
    GUISetState()

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

    While 1
    Sleep(120)
    WEnd

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

    Func _End()
    GUIDelete($hMainGui)
    Exit
    EndFunc ;==>_End

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

    Func _CheckDate()
    Local $dtNow = _NowCalc()
    ConsoleWrite($dtNow & @CRLF)
    LOCAL $sCheckFrom = GUICTRLREAD($HEDTFrom)
    LOCAL $sCheckTo = GUICTRLREAD($HEDTTo)
    if $sCheckFrom > $sCheckTo Then
    $sCheckFrom = $sCheckTo
    $sCheckTo = GUICTRLREAD($HEDTFrom)
    EndIf
    ConsoleWrite($sCheckFrom & @CRLF)
    ConsoleWrite($sCheckTo & @CRLF)
    LOCAL $dtFrom = _Date2Str($sCheckFrom)
    ConsoleWrite($dtFrom & @crlf)
    LOCAL $dtTo = _Date2Str($sCheckTo)
    ConsoleWrite($dtTo & @crlf)
    $sErg = $dtNow & @CRLF
    Select
    Case $dtNow >= $dtFrom and $dtNow <= $dtTo
    $sErg &= "liegt zwischen den"
    case $dtNow <= $dtFrom or $dtNow >= $dtTo
    $sErg &= "liegt ausserhalb den"
    case $dtNow = $dtFrom and $dtNow = $dtTo
    $sErg &= "entspricht den"
    EndSelect
    $sErg &= " beiden Terminen" & @CRLF & $dtFrom & @CRLF & $dtTo
    GUICtrlSetData($hlblErgebnis,$sErg)
    EndFunc ;==>_CallEaster

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

    Func _Date2Str($DateTime)
    Return StringMid($DateTime,7,4)&"/" & STRINGMID($DateTime,4,2) & "/" & STRINGLEFT($DateTime,2) & " " & StringRight($DateTime,8)
    EndFunc

    [/autoit]


    mfg autoBert