Hallo! Ich nutze AutoIt nun eine kleine Weile und dieses Forum hat mir schon oft geholfen, wenn ich Probleme hatte. Diesmal habe ich weder hier, noch in der Holfe oder sonstwo eine Lösung zu meinem Problem gefunden, das wie folgt aussieht:
Ich habe eine Funktion, welche mir einen Wert bis zu einem bestimmten Tag errechnet, dieser Wert ist die Restzeit in Sekunden. Den Wert schreibe ich dann in eine Variable $timeUntilNextEvent.
Nun möchte ich, dass dieser Wert in dem Label runtergezählt wird, was ich auch über Sleep hinbekommen habe:
Spoiler anzeigen
Func refreshLabel($extraNameData, $labelToRefresh, $numberToBeRefreshed, $delay = 1)
;$extraNameData ist ein Name, welchen das Programm aus einem Feld ausliest
;$labelToRefresh das Label, in das ich das Ergebnis, also den Counter auch eintrage
;$numberToBeRefreshed die Zahl, welche errechnet wurde.
$delay = $delay * 1000
$numberCount = $numberToBeRefreshed
$countDown = $numberCount
[/autoit] [autoit][/autoit] [autoit]Do
If $countDown > 0 Then
$labelContent = $extraNameData & ", die Restzeit bis zum nächsten Meilenstein beträgt: " & $numberCount & " Sekunden"
$numberCount -= 1
GUICtrlSetData($labelToRefresh, $labelContent)
EndIf
$countDown -= 1
Sleep($delay)
[/autoit] [autoit][/autoit] [autoit]Until $countDown = 0
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit]Das Problem ist jetzt nur, dass, sobald mein Programm anfängt, runterzuzählen, nichts mehr reagiert, weil das Programm in der Funktion bleibt.
Das wollte ich über _timer_settimer lösen, welches sich in meiner main befindet und diese Funktion auslöst.
Spoiler anzeigen
Func setCountInLabelTimeLeft($hWnd, $iMsg, $iIDTimer, $dwTime)
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($labelTimeLeft, $timeUntilNextEvent)
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit]Nur bekomme ich den $timeUntilNextEvent-Wert, der errechnete, nicht in die GUICtrlSetData rein, weder über Extra-Parameter noch sonstwie.
Hier noch meine main dazu:
Spoiler anzeigen
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btnExit
ExitLoop
GUIDelete()
Case $btnCalc
GUICtrlSetData($labelDateError, "")
GUICtrlSetData($labelTimeError, "")
GUICtrlSetData($labelNameError, "")
GUICtrlSetData($labelTimeLeft, "")
$inputDateData = readInputDate($inputDate)
$inputTimeData = readInputTime($inputTime)
$inputNameData = readInputName($inputName)
$checkInputDate = checkInputDate($inputDateData)
If $checkInputDate = 0 Then
GUICtrlSetData($labelDateError, "Falsche Eingabe: Format TT.MM.JJJJ")
EndIf
$checkInputTime = checkInputTime($inputTimeData)
If $checkInputTime = 0 Then
GUICtrlSetData($labelTimeError, "Falsche Eingabe: Format HH:MM")
EndIf
$checkInputName = checkInputName($inputNameData)
If $checkInputName = 0 Then
GUICtrlSetData($labelNameError, "Bitte nur Buchstaben!")
EndIf
If $checkInputDate = 1 And $checkInputTime = 1 And $checkInputName = 1 Then
[/autoit] [autoit][/autoit] [autoit]$timeUntilNextEvent = calcTimeToNextEvent($inputDateData, $inputTimeData)
refreshLabel($inputNameData, $labelTimeLeft, $timeUntilNextEvent)
;$timer = _Timer_SetTimer($gui, 10, 'setCountInLabelTimeLeft')
;startCounterInLabelTimeLeft($gui)
EndIf
EndSwitch
WEnd
Ich bin mit meinem Latein am Ende, für Hilfe wäre ich dankbar!