Timer Funktion geht nicht

  • Hallo zusammen,

    Ich habe gerade ein Problem mit einem Label. Gebaut habe ich ein kleines Browserfenster für meine Tochter, in der eine iframe HTML Seite eingebaut ist. Das funktioniert auch alles soweit. Es gibt oben im Autoit eine Überschrift. Jetzt möchte ich zusätzlich am linken Rand eine zweite Textzeile einfügen, welche mitten drin von 20 auf 0 zählt (also 20 Sekunden) und dann wieder bei 20 anfängt.

    Irgendwie hänge ich hier aber voll und hoffe das mich jemand auf die richtige Spur setzen kann :thumbup:

    Anbei ein Teil Code:

    Spoiler anzeigen
    [autoit]

    ; GUI wird erstellt
    $GUI_main = GUICreate("PapaControl", $varGUIWindowWidth, $varGUIWindowHeight, -1, -1)

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

    ; Timer
    ;~ While 1
    ;~ For $i = 20 To 1 Step -1
    ;~ GUICtrlSetData($Label01, $i)
    ;~ Sleep(1000)
    ;~ $Label00 = GUICtrlCreateLabel("Seite wird alle" & $Label01 & " Sekunden aktualisiert", 5, 5)
    ;~ Next
    ;~ $i = 20
    ;~ WEnd

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

    ; Überschrift
    GUISetFont(20)
    $Label02 = GUICtrlCreateLabel("Wo steckt mein Papa gerade ?", $varUeberschrift, -1)

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

    ; Browerfenster
    $browser = GUICtrlCreateObj($IE, 10, 50, $varGUIWindowWidth - 20, $varGUIWindowHeight - 65)
    GUISetState(@SW_SHOW)
    _IENavigate($IE, @TempDir & "\latitude.htm")

    [/autoit]

    Kann mir hier jemand im Abschnitt "Timer" (Zeile 4 bis 12) vielleicht helfen. Das geht so gar nicht ?(

    Danke Hassan

    Einmal editiert, zuletzt von HassanMullah (20. Juni 2012 um 14:29)

  • Sorry, aber das ist die falsche Richtung. Ich will ja nicht den Zeitunterschied, sondern einen "ungefähren" Counter der von 20 nach 0 zählt und wieder anfängt - und dabei sich in die Anwendung (EXE) sauber integriert, sodass der Rest auch noch geht.

    Also mit einer Schleife ist das schon zu bewerkstelligen, aber wie genau ???

    Trotzdem Danke

  • funktioniert doch...

    Spoiler anzeigen
    [autoit]

    $timer = TimerInit()

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

    while 1
    $sekunden = round(TimerDiff($timer)/1000,0)
    if $sekunden = 3 Then
    ConsoleWrite("3 Sekunden um" & @CRLF)
    $timer = TimerInit()
    EndIf
    WEnd

    [/autoit]

    einbauen kannst es aber selber? :)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Hallo x0r,

    Danke für die Info, aber ich vermute wir sprechen gerade aneinander vorbei :whistling:

    Ich versuche es mal ein wenig anderst

    Beispiel 1:

    Wenn ich das Script wie in Beispiel 1 aufrufe, bekomme ich meine GUI "normal" daragestellt

    Spoiler anzeigen
    [autoit]

    GUI wird erstellt
    $GUI_main = GUICreate("PapaControl", $varGUIWindowWidth, $varGUIWindowHeight, -1, -1)

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

    ; Timer
    ;~ Local $i = 6
    ;~ Do
    ;~ $i = $i - 1
    ;~ GUICtrlCreateLabel("Noch " & $i & " Sekunden bis Reload", 200, 200, 200, 200)
    ;~ Sleep(1000)
    ;~ GUISetState(@SW_SHOW)
    ;~ If $i = 0 Then $i = 6
    ;~ Until $i = 0

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

    ; Überschrift
    GUISetFont(20)
    $Label02 = GUICtrlCreateLabel("Wo steckt mein Papa gerade ?", $varUeberschrift, -1)

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

    ; Browerfenster
    ;$browser = GUICtrlCreateObj($IE, 10, 50, $varGUIWindowWidth - 20, $varGUIWindowHeight - 65)
    $browser = GUICtrlCreateObj($IE, 100, 100, 100, 100)
    GUISetState(@SW_SHOW)

    [/autoit]

    Beispiel 2:

    Wenn ich das Script wie in Beispiel 2 aufrufe, bekomme ich meine GUI dargestellt, aber Sie bleibt in der Schleife von "Timer" hängen. Der Timer soll aber parallel ablaufen, d.h. der Rest des Scriptes soll auch aufgebaut werden.

    Spoiler anzeigen
    [autoit]

    ; Timer
    Local $i = 6
    Do
    $i = $i - 1
    GUICtrlCreateLabel("Noch " & $i & " Sekunden bis Reload", 200, 200, 200, 200)
    Sleep(1000)
    GUISetState(@SW_SHOW)
    If $i = 0 Then $i = 6
    Until $i = 0

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

    ; Überschrift
    GUISetFont(20)
    $Label02 = GUICtrlCreateLabel("Wo steckt mein Papa gerade ?", $varUeberschrift, -1)

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

    ; Browerfenster
    ;$browser = GUICtrlCreateObj($IE, 10, 50, $varGUIWindowWidth - 20, $varGUIWindowHeight - 65)
    $browser = GUICtrlCreateObj($IE, 100, 100, 100, 100)
    GUISetState(@SW_SHOW)

    [/autoit]

    Besser so ???

    Was muss ich machen (bitte mit Beispiel), damit alles läuft und sich parallel ein Label kontinierlich updatet ?

    Gruss Hassan

  • Hi,

    ich mein schon das Richtige denke ich :)

    hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]

    ;hier gui erstellen
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    dim $timer = TimerInit()

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

    ;Lebenserhaltung für dein GUI

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

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

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

    $sekunden = round(TimerDiff($timer)/1000,0)
    if $sekunden >= 20 Then
    ;hier das was du updaten willst, z.b.:
    GUICtrlSetData($label02,"neue überschrift")
    $timer = TimerInit()
    EndIf

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

    WEnd

    [/autoit]

    Der perfekte 20 Sekunden Timer und dein GUI funktioniert auch noch! :)

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Hallo x0r,

    vielen Dank für Deine Hilfe. Wir nähern uns der Sache an :)

    Hier jetzt der aktuelle Code:

    Spoiler anzeigen
    [autoit]

    ; GUI wird erstellt
    $GUI_main = GUICreate("PapaControl", $varGUIWindowWidth, $varGUIWindowHeight, -1, -1)
    ; Timer
    $Label01 = GUICtrlCreateLabel("Noch 20 Sekunden bis Reload", 10, 20)
    ; Überschrift
    GUISetFont(20)
    $Label02 = GUICtrlCreateLabel("Wo steckt mein Papa gerade ?", $varUeberschrift, -1)
    ; Browserfenster
    $browser = GUICtrlCreateObj($IE, 10, 60, $varGUIWindowWidth - 20, $varGUIWindowHeight - 65)
    GUISetState(@SW_SHOW)
    _IENavigate($IE, @TempDir & "\latitude.htm")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    $sekunden = Round(TimerDiff($timer) / 1000, 0)
    MsgBox(0, "", $sekunden, 1)
    If $sekunden >= 20 Then
    ;hier das was du updaten willst, z.b.:
    GUICtrlSetData($Label01, "Noch " & $sekunden & " Sekunden bis Reload")
    $timer = TimerInit()
    GUISetState(@SW_SHOW)
    EndIf
    WEnd

    [/autoit]

    Die gute Nachricht: Die GUI startet. Aber folgendes passt noch nicht.

    Zum Test habe ich in Zeile 20 eine Messagebox eingebaut die von 1 bis 20 hoch zählt.

    Hier müsste der Counter gerade umgekehrt laufen, d.h. von 20 bis 1 und dann wieder bei 20 anfangen.

    Des weiteren dachte ich, das die Zeile 23 und 25 dazu führen, das Zeile 4 dann "im Sekundentakt" upgedatet wird, was aber nicht passiert.
    Was mache ich hier noch falsch, bzw. wo liegt mein Gedankenfehler ??

    Bin schon auf die Antwort gespannt :-))))))

    Gruss Hassan

  • Hallo HassanMullah,

    Nimm AdlibRegister damit geht es am einfachsten:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; GUI wird erstellt
    $GUI_main = GUICreate("PapaControl" )
    ; Timer
    $Label01 = GUICtrlCreateLabel("Noch 20 Sekunden bis Reload", 10, 20)
    GUISetState(@SW_SHOW)

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

    AdlibRegister("CountDown",1000)

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

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

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

    Func CountDown()
    Static $iRest = 20
    $iRest -= 1
    if $iRest = -1 Then $iRest = 20
    GUICtrlSetData($Label01,"Noch " & $iRest & " Sekunden bis Reload")
    EndFunc

    [/autoit]

    mfg autoBert

  • thx autoBert!

    Ich hab schon gesucht wie ein Blöder, um festzustellen, dass ich letztendlich doch (noch) zu blöd bin :D

    "AdlibRegister" hab ich noch nie benutzt :S

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.