Timer in einer Statusbar anzeigen und hochzählen lassen.

  • Hallo zusammen,

    irgendwie drehe ich mich im Kreis und komme nicht so recht weiter mit meinem Problem (sofern es überhaupt eines ist)

    Ich versuche in einer Statusbar einen (hochzählenden) Timer zum Laufen zu bringen.
    Dieser soll einfach die Laufzeit des Scripts (ich nutze das Script um einen (Datei/Dir)Vergleich zu machen) hochzählen.
    Mittels der _TicksToTime Funktion und AdlibRegister wollte/will ich das umsetzen.

    Leider passiert aber nichts, es wird nicht hochgezählt - warum ?
    Wahrscheinlich ist es eine Kleinigkeit, aber ich jedenfalls sehe diese nicht.
    Weiss jemand vielleicht Rat?
    Ich habe mal die entsprechenden Stellen des Scripts beigefügt

    [autoit]


    Local $cdeParts[5] = [9, 130, 180, 240, 10] ;StatusBar (-parts & Splitting)
    $cdeStatus = _GUICtrlStatusBar_Create($cde_Form1) ;Statusbar
    _GUICtrlStatusBar_SetMinHeight($cdeStatus, 20)
    _GUICtrlStatusBar_SetParts ($cdeStatus, $cdeParts)
    cdeCR = _GUICtrlStatusBar_SetText($cdeStatus, " - cde 2013-",4)
    ...
    Local $cde_begin = TimerInit() ;measuring search duration time -start-
    $cdeUhr = _GUICtrlStatusBar_SetText($cdeStatus, "00:00:00",2)
    AdlibRegister("Timer", 1000)
    ...

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

    Func Timer()
    _TicksToTime(Int(TimerDiff($cde_begin)), $Hour, $Mins, $Secs)
    Local $sTime = $Time ;Letzten Timerstand merken, um den Vergleich zu ermöglichen und Flackern zu vermeiden..
    $Time = StringFormat("%02i:%02i:%02i", $Hour, $Mins, $Secs)
    If $sTime <> $Time Then _GUICtrlStatusBar_SetText($cdeStatus, $cdeUhr, 2)
    EndFunc ;==>Timer

    [/autoit]


    Danke schon einmal im voraus

    mfg
    ugt100

    Einmal editiert, zuletzt von ugt100 (23. April 2013 um 10:50)

    • Offizieller Beitrag

    Poste mal das ganze Script, der Codefetzen ist nicht ausführbar.

    • Offizieller Beitrag

    Wenn du die Zeit anzeigen möchtest, warum verwendest du nicht die Makros?
    Da du die Variable $sTime nicht speicherst, hast du keinen Vergleichswert (Du erstellst die Variable bei jedem Aufruf neu). Und du setzt in der Statusbar die Variable $cdeUhr ohne dass deren Wert die Zeit annimmt.

    Ich würde das so lösen:

    [autoit]


    Func Timer()
    Local $sTime = @Hour & ":" @Min & ":" & @Sec
    Local Static $sLastTime = $sTime
    If StringRight($sLastTime, 2) <> @Sec Then
    $sLastTime = $sTime
    _GUICtrlStatusBar_SetText($cdeStatus, $sTime, 2)
    EndIf
    EndFunc ;==>Timer

    [/autoit]
  • Guten Morgen zusammen,

    Erst einmal grundsätzlich Danke für die Antworten.
    Nach einmal drüber schlafen habe ich es jetzt hinbekommen und sehe nun die aktuell hochlaufende Zeit pro Suchzyklus.
    Die eigentliche Lösung meines Problems lag darin, die Variable cde_begin (Starten des Timers) mittels cde_begin="" immer wieder zurückzusetzen.

    [autoit]


    ...
    $cde_begin = "" ; reset variable to 'NULL' - don't forget
    $cde_begin = TimerInit() ; measuring search duration time -start-
    $cdeUhr = _GUICtrlStatusBar_SetText($cdeStatus, "00:00:00",3)
    AdlibRegister("_Timer", 1000)

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

    ;----> hier läuft das eigentliche Script für den Dir/File Compare

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

    AdlibUnRegister("_Timer")

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

    ;das ist die TimerFunc
    Func _Timer()
    If Not @error Then
    $cdeTime = _TicksToTime(Int(TimerDiff($cde_begin)), $Hour, $Mins, $Secs)
    $cdeTimeNew = $cdeTime
    $cdeTime = StringFormat("%02i:%02i:%02i", $Hour, $Mins, $Secs)
    If $cdeTimeNew <> $cdeTime Then _GUICtrlStatusBar_SetText($cdeStatus, $cdeTime,3)
    EndIf
    EndFunc ;==>Timer()

    [/autoit]


    Da das ganze Script ziemlich lang (und aufwendig - zumindest aus meine Sicht) ist, wollte ich nur die Teile die im Zusammenhang mit dem Timer stehen in den Thread bringen.
    Aber wenn es jemanden interessiert - also das ganze Script als solches - stelle ich es natürlich zur Verfügung
    Grundsätzlich tut es das was es 'für meine Zwecke' tun soll - nämlich den Kollegen die Möglichkeit zu geben einen Dir bzw. File Compare zu machen,
    wobei die zu vergleichenden Laufwerke/Dirs bequem auswählbar sind. Als Ergebnis ergibt sich eine Übersicht der Differenzen und - wenn gewünscht - sind auch die 'Dir-Listen'
    verfügbar. Alle anderen Dinge (Timer, Logo, Animation etc..) sind meinem Spieltrieb geschuldet + letztlich 'nice to have'.
    Inwieweit das alles gut und 'sauber' programmiert ist, kann ich nicht beurteilen. Sicher wird es aus Sicht der Profis erhebliches Verbesserungspotential geben, aber als 'Newbie' stehe ich dazu.


    Raupi
    Ich hoffe das erklärt mein Anliegen + die nicht Snips

    BugFix
    Ich glaube da habe ich mich wohl etwas missverständlich ausgedrückt. Eigentlich will/wollte ich nicht die aktuelle Uhrzeit einblenden, sondern die Laufzeit des aktuellen Suchzykluses.


    Nochmals vielen Dank und wie gesagt wenn Interesse besteht am Script - einfach Bescheid geben

    mfg
    ugt100