Countdown Timer (Variable)

  • Hey Liebe Leute.. :rolleyes:

    Ich bin mal wieder auf ein Problem gestoßen welches sich nicht so einfach lösen lässt..
    zumindest nicht für mich..

    Mein Script ist zwar schon Fertig und Funktioniert auch Super. :thumbup:
    Jedoch hat es einen unschönen Schönheitsfehler.

    Momentan ist es so:
    Die ausgabe des Timers bzw. des Countdown zählt in Sekunden runter.. also bei zb. 60 Minuten zählt er von 3600 sek. runter..
    das geht dann pro Sekunde so weiter .. 3599 ... 3598 ... 3597 ... 3596 ... ich denke ihr versteht.. :huh:

    Eigenbemühungen:
    Nun... ich hab einiges versucht mit umrechnungen und If abfragen etc etc..
    auch die TimerDiff und TimerInit funktion hab ich mir mehrfach angesehen jedoch versteh ich das einfach nicht so richtig.

    Timerinit setzt den start des Timer ab dem gezählt werden soll und TimerDiff gibt dann die verstrichene Zeit aus?!
    Wie ich das umsetze? K.a. :whistling:

    Mein Ziel:
    Die ausgabe des Timers soll zb. wenn 5 Minuten eingegeben wurde.. nicht von 300 sek runterzählen sondern es so anzeigen 00:05:00
    und bei einer Stunde dann eben 01:00:00 ... Quasi im HH: MM: SS Format.

    Ich suche möglichst die am einfachsten zu verstehende Lösung..
    Aber wenn ich nicht um TimerInit und TimerDiff drumrumkomme..
    Bitte ich evtl um ein BeispielScript den ich auch verstehen kann.. sozusagen für Dummies.. :whistling:

    Und auch wenn es zuviel verlangt sein mag..
    Wäre klasse wenn ihr alles was ihr am Script macht kommentieren würdet.


    Mein Script:
    Ich hab mir die Kommentare im Script mal gespart denn ich behaupte, ihr versteht den auch ohne.. der ist sehr kurz und einfach :p

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GuiOnEventMode", 1)
    Global $Active = 0, $In = "", $Set = ""

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

    #Region ### START Koda GUI section ### Form=
    $Shutdown = GUICreate("Shutdown", 290, 99, 567, 326)
    GUISetFont(8, 800, 0, "Comic Sans MS")
    GUISetBkColor(0x7A96DF)
    ; Buttons
    $Start = GUICtrlCreateButton("Start", 16, 56, 43, 25)
    $Stop = GUICtrlCreateButton("Stop", 80, 56, 43, 25)
    $Reset = GUICtrlCreateButton("Reset", 208, 56, 67, 25)
    $Info = GUICtrlCreateButton("Info", 144, 56, 43, 25)
    ; Inputs
    $Time = GUICtrlCreateInput("", 16, 16, 169, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER))
    $Settings = GUICtrlCreateCombo("", 208, 17, 65, 25)
    GUICtrlSetData(-1, "Sek|Min|Std")

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlSetOnEvent($Start, "_Start")
    GUICtrlSetOnEvent($Stop, "_Stop")
    GUICtrlSetOnEvent($Reset, "_Reset")
    GUICtrlSetOnEvent($Info, "_Info")
    GUICtrlSetState($Stop, $GUI_DISABLE)
    GUICtrlSetState($Reset, $GUI_DISABLE)

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

    While 1
    Sleep (1000)
    If $Active = 1 Then
    $In -=1
    GUICtrlSetData($Time, "Noch "& $In &" sek") ; hier soll quasi der timer schlussendlich als Zb. "01:05:35" ausgegeben werden.
    EndIf

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

    If $In = 0 Then
    $Active = 0
    ;~ Shutdown(5)
    EndIf
    WEnd

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

    Func _Start()

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

    If GUICtrlRead($Start) = "Start" Then
    $In = GUICtrlRead($Time)
    $Set = GUICtrlRead($Settings)
    EndIf

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

    If ($In AND $Set) = "" Then
    MsgBox(0,"Fehler", "Die Angaben sind unvollständig.")
    Else
    GUICtrlSetState($Start, $GUI_DISABLE)
    GUICtrlSetState($Stop, $GUI_ENABLE)
    GUICtrlSetState($Info, $GUI_DISABLE)
    GUICtrlSetState($Reset, $GUI_DISABLE)
    GUICtrlSetState($Time, $GUI_DISABLE)
    GUICtrlSetState($Settings, $GUI_DISABLE)

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

    If GUICtrlRead($Start) = "Start" Then
    If $Set = "Min" Then $In *= 60
    If $Set = "Std" Then $In *= 3600
    EndIf

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

    $Active = 1
    EndIf
    EndFunc

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

    Func _Stop()
    $Active = 0
    GUICtrlSetState($Reset, $GUI_ENABLE)
    GUICtrlSetState($Start, $GUI_ENABLE)
    GUICtrlSetData($Start, "Weiter")
    EndFunc

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

    Func _Reset()
    GUICtrlSetData($Time, "")
    GUICtrlSetData($Settings, "")
    GUICtrlSetData(-1, "Sek|Min|Std")

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

    GUICtrlSetState($Start, $GUI_ENABLE)
    GUICtrlSetState($Info, $GUI_ENABLE)
    GUICtrlSetData($Start, "Start")

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

    GUICtrlSetState($Stop, $GUI_DISABLE)
    GUICtrlSetState($Reset, $GUI_DISABLE)

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

    GUICtrlSetState($Time, $GUI_ENABLE)
    GUICtrlSetState($Settings, $GUI_ENABLE)
    EndFunc

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

    Func _Info()
    MsgBox(0,"By ThirtySix", "v1.0")
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Wer Rechtschreibfehler findet darf sie behalten. :D

    Einmal editiert, zuletzt von ThirtySix (16. Juli 2013 um 11:29)

  • kann sein, dass es in den udf's schon was gibt, aber hier meine schnelle hms-lösung ;)

    die kannst bestimmt da mit einbauen:

    [autoit]

    MsgBox(0,"",hms(299))

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

    func hms($var)

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

    ;~ $var = $var / 1000 ;falls der wert in ms angegeben ist (1000 = 1 sekunde)

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

    local $h = 0, $m = 0, $s = 0

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

    for $i = 1 to $var
    $s += 1
    if $s = 60 Then
    $m += 1
    $s = 0
    EndIf

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

    if $m = 60 Then
    $h += 1
    $m = 0
    EndIf
    Next

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

    if StringLen($h) = 1 Then $h = "0" & $h
    if StringLen($m) = 1 Then $m = "0" & $m
    if StringLen($s) = 1 Then $s = "0" & $s

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

    return $h & ":" & $m & ":" & $s

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

    EndFunc

    [/autoit]

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

  • Nun das umzurechnen ist eigentlich gar nicht so schwierig:

    [autoit]

    $sekunden = 5678 ; Beispiel

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

    $h = Int($sekunden / 3600)
    $s = $sekunden - ($h * 3600)
    $m = Int($s / 60)
    $s = $s - ($m * 60)

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

    MsgBox(0, $h & ":" & $m & ":" & $s)

    [/autoit]

    Edit: Falls du willst, dass der String immer die gleiche länge hat, sprich z.B. 01:26:07 machst du das am einfachsten mit StringFormat.

    Gruss Shadowigor

  • Erstmal Danke euch beiden..
    nun hab ich ne Grundidee..

    aber Ich steh heute irgendwie aufm Schlauch... :huh:
    Weiß nichtmal was davon in die Schleife muss..
    Aber ich berichte mein Ergebniss sobald ich ne Lösung hab.. :whistling:

    Danke schonmal :thumbup:


    //Edit:

    okay nun bin ich schonmal soweit..
    dem Ziel ganz Nah! .. :thumbup:

    Spoiler anzeigen
    [autoit]

    $sekunden = 305 ; Beispiel

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

    While 1
    Sleep (1000)

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

    $sekunden -=1
    $h = Int($sekunden / 3600)
    $s = $sekunden - ($h * 3600)
    $m = Int($s / 60)
    $s = $s - ($m * 60)

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

    ConsoleWrite($h & ":" & $m & ":" & $s & @CRLF)
    WEnd

    [/autoit]


    //Edit2:

    Wahrscheinlich wollt Ihr mich dafür jetzt Schänden oder so :S
    aber ich hab immerhin eine Lösung..

    Spoiler anzeigen
    [autoit]


    $sekunden = 305 ; Beispiel

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

    While 1
    Sleep (1000)

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

    $sekunden -=1
    $h = Int($sekunden / 3600)
    $s = $sekunden - ($h * 3600)
    $m = Int($s / 60)
    $s = $s - ($m * 60)

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

    If $h < 10 then
    $h0 = "0"
    Else
    $h0 = ""
    EndIf

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

    If $m < 10 then
    $m0 = "0"
    Else
    $m0 = ""
    EndIf

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

    If $s < 10 then
    $s0 = "0"
    Else
    $s0 = ""
    EndIf

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

    ConsoleWrite($h0 & $h & ":" & $m0 & $m & ":" & $s0 & $s & @CRLF)
    WEnd

    [/autoit]

    und eingebaut im Script..
    Danke ... Somit gelöst! :)

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GuiOnEventMode", 1)
    Global $Active = 0, $In = 1, $Set = ""

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

    #Region ### START Koda GUI section ### Form=
    $Shutdown = GUICreate("Shutdown", 180, 124, 567, 326)
    GUISetFont(9, 800, 0, "Comic Sans MS")
    GUISetBkColor(0x99B4D1)

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

    $Start = GUICtrlCreateButton("Start", 96, 16, 67, 25)
    $Stop = GUICtrlCreateButton("Stop", 96, 48, 67, 25)
    $Reset = GUICtrlCreateButton("Reset", 96, 80, 67, 25)
    $Info = GUICtrlCreateButton("Info", 16, 80, 67, 25)

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

    $Time = GUICtrlCreateInput("", 16, 16, 65, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER))
    $Settings = GUICtrlCreateCombo("", 16, 49, 65, 25, BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE))
    GUICtrlSetData(-1, "Sek|Min|Std")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlSetOnEvent($Start, "_Start")
    GUICtrlSetOnEvent($Stop, "_Stop")
    GUICtrlSetOnEvent($Reset, "_Reset")
    GUICtrlSetOnEvent($Info, "_Info")
    GUICtrlSetState($Stop, $GUI_DISABLE)
    GUICtrlSetState($Reset, $GUI_DISABLE)

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

    While 1
    Sleep (1000)
    If $Active = 1 Then

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

    $In -=1
    $h = Int($In / 3600)
    $s = $In - ($h * 3600)
    $m = Int($s / 60)
    $s = $s - ($m * 60)

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

    If $h < 10 then
    $h0 = "0"
    Else
    $h0 = ""
    EndIf

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

    If $m < 10 then
    $m0 = "0"
    Else
    $m0 = ""
    EndIf

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

    If $s < 10 then
    $s0 = "0"
    Else
    $s0 = ""
    EndIf

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

    GUICtrlSetData($Time, $h0 & $h & ":" & $m0 & $m & ":" & $s0 & $s)
    EndIf

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

    If $In = 0 Then
    $Active = 0
    $In = 1
    ConsoleWrite("test")
    ;~ Shutdown(5)
    _Reset()
    EndIf
    WEnd

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

    Func _Start()

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

    If GUICtrlRead($Start) = "Start" Then
    $In = GUICtrlRead($Time)
    $Set = GUICtrlRead($Settings)
    EndIf

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

    If ($In AND $Set) = "" Then
    MsgBox(0,"Fehler", "Die Angaben sind unvollständig.")
    Else
    GUICtrlSetState($Start, $GUI_DISABLE)
    GUICtrlSetState($Stop, $GUI_ENABLE)
    GUICtrlSetState($Info, $GUI_DISABLE)
    GUICtrlSetState($Reset, $GUI_DISABLE)
    GUICtrlSetState($Time, $GUI_DISABLE)
    GUICtrlSetState($Settings, $GUI_DISABLE)

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

    If GUICtrlRead($Start) = "Start" Then
    If $Set = "Min" Then $In *= 60
    If $Set = "Std" Then $In *= 3600
    EndIf

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

    $Active = 1
    EndIf
    EndFunc

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

    Func _Stop()
    $Active = 0
    GUICtrlSetState($Reset, $GUI_ENABLE)
    GUICtrlSetState($Start, $GUI_ENABLE)
    GUICtrlSetData($Start, "Weiter")
    EndFunc

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

    Func _Reset()
    GUICtrlSetData($Time, "")
    GUICtrlSetData($Settings, "")
    GUICtrlSetData(-1, "Sek|Min|Std")

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

    GUICtrlSetState($Start, $GUI_ENABLE)
    GUICtrlSetState($Info, $GUI_ENABLE)
    GUICtrlSetData($Start, "Start")

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

    GUICtrlSetState($Stop, $GUI_DISABLE)
    GUICtrlSetState($Reset, $GUI_DISABLE)

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

    GUICtrlSetState($Time, $GUI_ENABLE)
    GUICtrlSetState($Settings, $GUI_ENABLE)
    EndFunc

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

    Func _Info()
    MsgBox(0,"By ThirtySix", "v1.0")
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Wer Rechtschreibfehler findet darf sie behalten. :D

    6 Mal editiert, zuletzt von ThirtySix (16. Juli 2013 um 16:04)

  • Und wenn es abgelaufen ist, soll man selber noch auf Stop drücken???

    Sleep würde ich dafür nicht nehmen, dass ist zu ungenau und Prozessorabhängig.
    Die Timer UDF macht da mehr Sinn. Zudem es der auch nicht interessiert, wenn man das Fenster bewegt.


  • Und wenn es abgelaufen ist, soll man selber noch auf Stop drücken???

    Sleep würde ich dafür nicht nehmen, dass ist zu ungenau und Prozessorabhängig.
    Die Timer UDF macht da mehr Sinn. Zudem es der auch nicht interessiert, wenn man das Fenster bewegt.


    Ich hab keine Ahnung wovon du sprichst.. ?(
    Aber.. auf Stop drücken brauch man nichtmehr.. wenn auf 0 ist dann Shutdown(5) :huh:
    Dann is Pc aus und alles egal ^^

    Das is nur weil ich mein Pc nicht über Nacht laufen lassen will aber meist mit nem Film oder Musik ins Bett geh..
    (nein ich habe seit 6 Jahren keinen Fernsehr mehr. - wirst eh nur bekloppt von der Werbung :cursing: )

    Wie dem auch sei.. wenn du Lust und Zeit hast.. kannst du mir gern den Script umschreiben..
    Ich werd versuchen es zu verstehen :D

    Im grunde reicht das für mich so.. da ich das Fenster ja weder verschiebe noch sonst was..
    Also ist zuverlässig genug..

    Aber ich fänds trotzdem gut mehr zu lernen also.. erzähl.. wie würdest du das machen ?
    :P

    Wer Rechtschreibfehler findet darf sie behalten. :D

  • Also das

    [autoit]

    If ($In AND $Set) = "" Then

    [/autoit]


    geht ja mal garnicht. Überleg mal was er das auswertet, das sind ja beides Strings.
    Wenn dann heißt das so:

    [autoit]

    If $In = "" Or $Set = "" Then

    [/autoit]

    Aber ich poste mal nachher meine Version.

  • So meine Version:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <Timers.au3>

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

    Opt("GuiOnEventMode", 1)
    Global $hGui, $cStart, $cStop, $cReset, $cInfo, $cTime, $cUnit, $iSecs

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

    $hGui = GUICreate("Shutdown", 180, 124)
    GUISetFont(9, 800, 0, "Comic Sans MS")
    GUISetBkColor(0x99B4D1)
    $cStart = GUICtrlCreateButton("Start", 96, 16, 67, 25)
    $cStop = GUICtrlCreateButton("Stop", 96, 48, 67, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $cReset = GUICtrlCreateButton("Reset", 96, 80, 67, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $cInfo = GUICtrlCreateButton("Info", 15, 80, 67, 25)
    $cTime = GUICtrlCreateInput("", 16, 16, 65, 24, BitOR($ES_CENTER, $ES_NUMBER))
    GUICtrlSendMsg($cTime, 0x1501, 0, "Zeitwert")
    $cUnit = GUICtrlCreateCombo("", 16, 49, 65, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE))
    GUICtrlSetData(-1, "Sek|Min|Std")
    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlSetOnEvent($cStart, "_Start")
    GUICtrlSetOnEvent($cStop, "_Stop")
    GUICtrlSetOnEvent($cReset, "_Reset")
    GUICtrlSetOnEvent($cInfo, "_Info")

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

    While 1
    Sleep(10)
    WEnd

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

    Func _Start()
    If GUICtrlRead($cTime) = "" Or GUICtrlRead($cUnit) = "" Then
    MsgBox(0, "Fehler", "Die Angaben sind unvollständig.", 0, $hGui)
    Return
    EndIf

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

    GUICtrlSetState($cStart, $GUI_DISABLE)
    GUICtrlSetState($cReset, $GUI_DISABLE)
    GUICtrlSetState($cTime, $GUI_DISABLE)
    GUICtrlSetState($cUnit, $GUI_DISABLE)
    GUICtrlSetState($cStop, $GUI_ENABLE)

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

    $iSecs = Int(GUICtrlRead($cTime))

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

    If GUICtrlRead($cUnit) = "Min" Then $iSecs *= 60
    If GUICtrlRead($cUnit) = "Std" Then $iSecs *= 3600

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

    Local $_iHours = Int($iSecs / 3600)
    Local $_iSecs = $iSecs - ($_iHours * 3600)
    Local $_iMins = Int($_iSecs / 60)
    $_iSecs = $_iSecs - ($_iMins * 60)

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

    GUICtrlSetData($cTime, StringFormat("%02i:%02i:%02i", $_iHours, $_iMins, $_iSecs))

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

    _Timer_SetTimer($hGui, 1000, "_Timer")
    EndFunc

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

    Func _Timer($_hWnd, $_Msg, $_iIDTimer, $_dwTime)
    #forceref $_hWnd, $_Msg, $_iIDTimer, $_dwTime
    $iSecs -= 1

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

    Local $_iHours = Int($iSecs / 3600)
    Local $_iSecs = $iSecs - ($_iHours * 3600)
    Local $_iMins = Int($_iSecs / 60)
    $_iSecs = $_iSecs - ($_iMins * 60)

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

    GUICtrlSetData($cTime, StringFormat("%02i:%02i:%02i", $_iHours, $_iMins, $_iSecs))

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

    If $_iSecs = 0 Then
    _Stop()
    _Reset()
    ConsoleWrite("Shutdown" & @CRLF)
    ;~ Shutdown(5)
    EndIf
    EndFunc

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

    Func _Stop()
    _Timer_KillAllTimers($hGui)
    GUICtrlSetState($cStop, $GUI_DISABLE)
    GUICtrlSetState($cReset, $GUI_ENABLE)
    GUICtrlSetState($cStart, $GUI_ENABLE)
    GUICtrlSetData($cStart, "Weiter")
    EndFunc

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

    Func _Reset()
    GUICtrlSetData($cTime, "")
    GUICtrlSetState($cTime, $GUI_ENABLE)
    GUICtrlSetData($cUnit, "")
    GUICtrlSetData($cUnit, "Sek|Min|Std")
    GUICtrlSetState($cUnit, $GUI_ENABLE)
    GUICtrlSetState($cStop, $GUI_DISABLE)
    GUICtrlSetState($cReset, $GUI_DISABLE)
    GUICtrlSetData($cStart, "Start")
    GUICtrlSetState($cStart, $GUI_ENABLE)
    EndFunc

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

    Func _Info()
    MsgBox(0, "By ThirtySix", "v1.0", 0, $hGui)
    EndFunc

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

    Func _Exit()
    _Timer_KillAllTimers($hGui)
    Exit
    EndFunc

    [/autoit]


    Bei mir ist der Info-Button immer aktiv, warum sollte er auch inaktiv sein. ;)


  • So meine Version:

    [...]

    Bei mir ist der Info-Button immer aktiv, warum sollte er auch inaktiv sein. ;)

    Sehr schön .. 8|

    Aber is dir beim testen nicht aufgefallen, dass wenn der Countdown Zählt und du auf "Stop" drückst.. und dann wieder auf "Weiter"
    der sofort auf "0" springt und dann ins Minus zählt ? :P

    Das war das erste was mir aufgefallen is .. :huh:

    //Edit:
    verstehen tuh ichs trotzdem nicht.. ;(

    Wer Rechtschreibfehler findet darf sie behalten. :D

    Einmal editiert, zuletzt von ThirtySix (17. Juli 2013 um 09:42)

  • oh hoppalla.
    Dann in _Start() diese Zeile ändern

    [autoit]

    $iSecs = Int(GUICtrlRead($cTime))

    [/autoit]


    in

    [autoit]

    If Not StringInStr(GUICtrlRead($cTime), ":") Then $iSecs = Int(GUICtrlRead($cTime))

    [/autoit]
  • Och man ey. Musste es vorhin schnell machen, war auf der Arbeit.
    Aber jetzt müsste es stimmen :whistling:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <Timers.au3>

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

    Opt("GuiOnEventMode", 1)
    Global $hGui, $cStart, $cStop, $cReset, $cInfo, $cTime, $cUnit, $iSecs

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

    $hGui = GUICreate("Shutdown", 180, 124)
    GUISetFont(9, 800, 0, "Comic Sans MS")
    GUISetBkColor(0x99B4D1)
    $cStart = GUICtrlCreateButton("Start", 96, 16, 67, 25)
    $cStop = GUICtrlCreateButton("Stop", 96, 48, 67, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $cReset = GUICtrlCreateButton("Reset", 96, 80, 67, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $cInfo = GUICtrlCreateButton("Info", 15, 80, 67, 25)
    $cTime = GUICtrlCreateInput("", 16, 16, 65, 24, BitOR($ES_CENTER, $ES_NUMBER))
    GUICtrlSendMsg($cTime, 0x1501, 0, "Zeitwert")
    $cUnit = GUICtrlCreateCombo("", 16, 49, 65, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE))
    GUICtrlSetData(-1, "Sek|Min|Std")
    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlSetOnEvent($cStart, "_Start")
    GUICtrlSetOnEvent($cStop, "_Stop")
    GUICtrlSetOnEvent($cReset, "_Reset")
    GUICtrlSetOnEvent($cInfo, "_Info")

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

    While 1
    Sleep(10)
    WEnd

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

    Func _Start()
    If GUICtrlRead($cTime) = "" Or GUICtrlRead($cUnit) = "" Then
    MsgBox(0, "Fehler", "Die Angaben sind unvollständig.", 0, $hGui)
    Return
    EndIf

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

    GUICtrlSetState($cStart, $GUI_DISABLE)
    GUICtrlSetState($cReset, $GUI_DISABLE)
    GUICtrlSetState($cTime, $GUI_DISABLE)
    GUICtrlSetState($cUnit, $GUI_DISABLE)
    GUICtrlSetState($cStop, $GUI_ENABLE)

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

    If Not StringInStr(GUICtrlRead($cTime), ":") Then
    $iSecs = Int(GUICtrlRead($cTime))
    If GUICtrlRead($cUnit) = "Min" Then $iSecs *= 60
    If GUICtrlRead($cUnit) = "Std" Then $iSecs *= 3600
    EndIf

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

    Local $_iHours = Int($iSecs / 3600)
    Local $_iSecs = $iSecs - ($_iHours * 3600)
    Local $_iMins = Int($_iSecs / 60)
    $_iSecs = $_iSecs - ($_iMins * 60)

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

    GUICtrlSetData($cTime, StringFormat("%02i:%02i:%02i", $_iHours, $_iMins, $_iSecs))

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

    _Timer_SetTimer($hGui, 1000, "_Timer")
    EndFunc

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

    Func _Timer($_hWnd, $_Msg, $_iIDTimer, $_dwTime)
    #forceref $_hWnd, $_Msg, $_iIDTimer, $_dwTime
    $iSecs -= 1

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

    Local $_iHours = Int($iSecs / 3600)
    Local $_iSecs = $iSecs - ($_iHours * 3600)
    Local $_iMins = Int($_iSecs / 60)
    $_iSecs = $_iSecs - ($_iMins * 60)

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

    GUICtrlSetData($cTime, StringFormat("%02i:%02i:%02i", $_iHours, $_iMins, $_iSecs))

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

    If $_iSecs = 0 Then
    _Stop()
    _Reset()
    ConsoleWrite("Shutdown" & @CRLF)
    ;~ Shutdown(5)
    EndIf
    EndFunc

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

    Func _Stop()
    _Timer_KillAllTimers($hGui)
    GUICtrlSetState($cStop, $GUI_DISABLE)
    GUICtrlSetState($cReset, $GUI_ENABLE)
    GUICtrlSetState($cStart, $GUI_ENABLE)
    GUICtrlSetData($cStart, "Weiter")
    EndFunc

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

    Func _Reset()
    GUICtrlSetData($cTime, "")
    GUICtrlSetState($cTime, $GUI_ENABLE)
    GUICtrlSetData($cUnit, "")
    GUICtrlSetData($cUnit, "Sek|Min|Std")
    GUICtrlSetState($cUnit, $GUI_ENABLE)
    GUICtrlSetState($cStop, $GUI_DISABLE)
    GUICtrlSetState($cReset, $GUI_DISABLE)
    GUICtrlSetData($cStart, "Start")
    GUICtrlSetState($cStart, $GUI_ENABLE)
    EndFunc

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

    Func _Info()
    MsgBox(0, "By ThirtySix", "v1.0", 0, $hGui)
    EndFunc

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

    Func _Exit()
    _Timer_KillAllTimers($hGui)
    Exit
    EndFunc

    [/autoit]
  • Jap .. jetzt passts. :D

    fand meins aber trotzdem auch gut... :rolleyes:
    ich werd mal versuchen deins richtig zu verstehen... :huh:
    wünsch mir glück! :P

    Wer Rechtschreibfehler findet darf sie behalten. :D