Uhrzeit der selbstgeschriebenen Uhr springt

  • Hallo autoit-comunnity!
    Nach ausfürhlichem googeln und suchen im Forum habe ich keine Lösung für folgendes Problem gefunden.
    Meine Uhr

    Spoiler anzeigen
    [autoit]


    $Form1Uhr = GUICreate("Uhr", 388, 96, 877, 1, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)
    $Label1Stunden = GUICtrlCreateLabel(@HOUR, 8, 16, 84, 65)
    GUICtrlSetFont(-1, 40, 400, 0, "Courier New")
    $Label3Minuten = GUICtrlCreateLabel(@MIN, 152, 16, 84, 65)
    GUICtrlSetFont(-1, 40, 400, 0, "Courier New")
    $Label4Doppelpunkt = GUICtrlCreateLabel(":", 248, 16, 36, 57)
    GUICtrlSetFont(-1, 30, 400, 0, "Courier New")
    $Label5Sekunden = GUICtrlCreateLabel(@SEC, 296, 16, 84, 65)
    GUICtrlSetFont(-1, 40, 400, 0, "Courier New")
    $Label2Doppelpunkt = GUICtrlCreateLabel(":", 104, 16, 36, 57, $SS_CENTER)
    GUICtrlSetFont(-1, 30, 400, 0, "Courier New")
    GUISetState(@SW_SHOW, $Form1Uhr)

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

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

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

    Func _Uhrzeitakualisieren ()
    If $Label5Sekunden <> @SEC Then
    GUICtrlSetData($Label5Sekunden, @SEC)
    If $Label3Minuten <> @MIN Then
    GUICtrlSetData($Label3Minuten, @MIN)
    If $Label1Stunden <> @HOUR Then
    GUICtrlSetData($Label1Stunden, @HOUR)
    EndIf
    EndIf
    EndIf
    EndFunc

    [/autoit]

    springt bei den Sekunden entweder von 05 auf 07 (ohne vorheriges Anzeigen der 06) oder von 06 auf 08 (ohne vorheriges Anzeigen der 07). Das Flackern der Zahlen weiß ich zu beheben.
    Es geht mir in dieser Frage ausschließlich um die Anzeige der Zahlen.
    Vielen Dank für Eure Hilfe!

  • Spoiler anzeigen
    [autoit]

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

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

    $Form1Uhr = GUICreate("Uhr", 388, 96, 877, 1, 0, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
    $Label1Stunden = GUICtrlCreateLabel(@HOUR, 8, 16, 84, 65)
    GUICtrlSetFont(-1, 40, 400, 0, "Courier New")
    $Label3Minuten = GUICtrlCreateLabel(@MIN, 152, 16, 84, 65)
    GUICtrlSetFont(-1, 40, 400, 0, "Courier New")
    $Label4Doppelpunkt = GUICtrlCreateLabel(":", 248, 16, 36, 57)
    GUICtrlSetFont(-1, 30, 400, 0, "Courier New")
    $Label5Sekunden = GUICtrlCreateLabel(@SEC, 296, 16, 84, 65)
    GUICtrlSetFont(-1, 40, 400, 0, "Courier New")
    $Label2Doppelpunkt = GUICtrlCreateLabel(":", 104, 16, 36, 57, $SS_CENTER)
    GUICtrlSetFont(-1, 30, 400, 0, "Courier New")
    GUISetState(@SW_SHOW, $Form1Uhr)

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

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

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

    Func _Uhrzeitakualisieren ()
    If GUICtrlRead($Label5Sekunden) <> @SEC Then
    GUICtrlSetData($Label5Sekunden, @SEC)
    If GUICtrlRead($Label3Minuten) <> @MIN Then
    GUICtrlSetData($Label3Minuten, @MIN)
    If GUICtrlRead($Label1Stunden) <> @HOUR Then
    GUICtrlSetData($Label1Stunden, @HOUR)
    EndIf
    EndIf
    EndIf
    EndFunc

    [/autoit]


    So gehts.

    Du kannst nicht Guicontrols mit anderen Werten vergleichen. Die COntrols sind nämlich nur ein handle, also eine Zahl, die die Adresse des Controls im Arbeitsspeicher speichert.


    Außerdem hast du eine exstyle-constante beim Stylesparameter eingetragen. Man kann die beiden aber mit BitOr verbinden.

  • Hi!


    Mach es doch ein wenig kürzer! ;)

    Spoiler anzeigen
    [autoit]

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

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

    $Form1Uhr = GUICreate("Uhr", 330, 96, 880, 1, 0, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
    $Label1Stunden = GUICtrlCreateLabel(@HOUR & ':' & @MIN & ':' & @SEC, 10, 16, 320, 65)
    GUICtrlSetFont(-1, 40, 400, 0, "Courier New")
    GUISetState()

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

    While 1 * Sleep(1000)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case Else
    GUICtrlSetData($Label1Stunden,StringFormat('%02d:%02d:%02d', @HOUR, @MIN, @SEC))
    EndSwitch
    WEnd

    [/autoit]

    LG Kleiner