ich hab mal ein wenig dran rum gebastelt um das Startverhalten etwas zu optimieren und das Laufzeitverhalten.
Da ist aber noch Potenzial drin...
Tidy spuckt aber noch einen harten Error aus (CRT ...)
den habe ich jetzt nicht gesucht / behoben (ist jetzt behoben. Anscheinend mag Tidy keine Variablen mit ca. 4000 Zeichen in einer Zeile ...)
AutoIt
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Date.au3>
#include <DateTimeConstants.au3>
;#include <GDIPlus.au3> / not necessary
;#include <WinAPIGdi.au3> / not necessary
; #####################################################################
; # Fill Data into Dropdown Boxes
; #####################################################################
Global $Timer = TimerInit()
; Fill Dropdown: Hours
Local $sHours = "01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23"
; Fill Dropdown: Minutes and Seconds
Local $sMinSec = "01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59"
; Fill Dropdown: Milliseconds
Local $sMillis = "001|002|003|004|005|006|007|008|009|010|011|012|013|014|015|016|017|018|019|020|021|022|023|024|025|026|027|028|029|030|031|032|033|034|035|036|037|038|039|040|041|042|043|044|045|046|047|048|049|050|051|052|053|054|055|056|057|058|059|060|061|062|063|064|065|066|067|068|069|070|071|072|073|074|075|076|077|078|079|080|081|082|083|084|085|086|087|088|089|090|091|092|093|094|095|096|097|098|099|100|" & _
"101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|" & _
"201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|256|257|258|259|260|261|262|263|264|265|266|267|268|269|270|271|272|273|274|275|276|277|278|279|280|281|282|283|284|285|286|287|288|289|290|291|292|293|294|295|296|297|298|299|300|" & _
"301|302|303|304|305|306|307|308|309|310|311|312|313|314|315|316|317|318|319|320|321|322|323|324|325|326|327|328|329|330|331|332|333|334|335|336|337|338|339|340|341|342|343|344|345|346|347|348|349|350|351|352|353|354|355|356|357|358|359|360|361|362|363|364|365|366|367|368|369|370|371|372|373|374|375|376|377|378|379|380|381|382|383|384|385|386|387|388|389|390|391|392|393|394|395|396|397|398|399|400|" & _
"401|402|403|404|405|406|407|408|409|410|411|412|413|414|415|416|417|418|419|420|421|422|423|424|425|426|427|428|429|430|431|432|433|434|435|436|437|438|439|440|441|442|443|444|445|446|447|448|449|450|451|452|453|454|455|456|457|458|459|460|461|462|463|464|465|466|467|468|469|470|471|472|473|474|475|476|477|478|479|480|481|482|483|484|485|486|487|488|489|490|491|492|493|494|495|496|497|498|499|500|" & _
"501|502|503|504|505|506|507|508|509|510|511|512|513|514|515|516|517|518|519|520|521|522|523|524|525|526|527|528|529|530|531|532|533|534|535|536|537|538|539|540|541|542|543|544|545|546|547|548|549|550|551|552|553|554|555|556|557|558|559|560|561|562|563|564|565|566|567|568|569|570|571|572|573|574|575|576|577|578|579|580|581|582|583|584|585|586|587|588|589|590|591|592|593|594|595|596|597|598|599|600|" & _
"601|602|603|604|605|606|607|608|609|610|611|612|613|614|615|616|617|618|619|620|621|622|623|624|625|626|627|628|629|630|631|632|633|634|635|636|637|638|639|640|641|642|643|644|645|646|647|648|649|650|651|652|653|654|655|656|657|658|659|660|661|662|663|664|665|666|667|668|669|670|671|672|673|674|675|676|677|678|679|680|681|682|683|684|685|686|687|688|689|690|691|692|693|694|695|696|697|698|699|700|" & _
"701|702|703|704|705|706|707|708|709|710|711|712|713|714|715|716|717|718|719|720|721|722|723|724|725|726|727|728|729|730|731|732|733|734|735|736|737|738|739|740|741|742|743|744|745|746|747|748|749|750|751|752|753|754|755|756|757|758|759|760|761|762|763|764|765|766|767|768|769|770|771|772|773|774|775|776|777|778|779|780|781|782|783|784|785|786|787|788|789|790|791|792|793|794|795|796|797|798|799|800|" & _
"801|802|803|804|805|806|807|808|809|810|811|812|813|814|815|816|817|818|819|820|821|822|823|824|825|826|827|828|829|830|831|832|833|834|835|836|837|838|839|840|841|842|843|844|845|846|847|848|849|850|851|852|853|854|855|856|857|858|859|860|861|862|863|864|865|866|867|868|869|870|871|872|873|874|875|876|877|878|879|880|881|882|883|884|885|886|887|888|889|890|891|892|893|894|895|896|897|898|899|900|" & _
"901|902|903|904|905|906|907|908|909|910|911|912|913|914|915|916|917|918|919|920|921|922|923|924|925|926|927|928|929|930|931|932|933|934|935|936|937|938|939|940|941|942|943|944|945|946|947|948|949|950|951|952|953|954|955|956|957|958|959|960|961|962|963|964|965|966|967|968|969|970|971|972|973|974|975|976|977|978|979|980|981|982|983|984|985|986|987|988|989|990|991|992|993|994|995|996|997|998|999"
ConsoleWrite(TimerDiff($Timer) & "ms nach Dropdown Variablen Erstellung" & @CRLF)
#Region ### START Koda GUI section ###
Global $illclock = GUICreate("Clocking It!", 338, 791, -1, -1, -1, BitOR($WS_EX_COMPOSITED, $WS_EX_LAYERED))
Global $MenuFile = GUICtrlCreateMenu("File")
Global $MenuReset = GUICtrlCreateMenuItem("Reset", $MenuFile)
Global $MenuExit = GUICtrlCreateMenuItem("Exit", $MenuFile)
Global $MenuHelp = GUICtrlCreateMenu("Help")
Global $MenuInfo = GUICtrlCreateMenuItem("Info", $MenuHelp)
Global $MenuAbout = GUICtrlCreateMenuItem("About", $MenuHelp)
Global $DayDate = GUICtrlCreateLabel("DayDate", 40, 20, 262, 33)
Global $Clock = GUICtrlCreateLabel("", 40, 66, 262, 53)
Global $StartCheckBox = GUICtrlCreateCheckbox("Start", 16, 160, 41, 17)
Global $StopCheckBox = GUICtrlCreateCheckbox("Stop", 288, 160, 41, 17)
Global $Autocalculation = GUICtrlCreateLabel("00:00:00.000", 64, 152, 213, 33)
Global $StartMCalc = GUICtrlCreateLabel("Start Calculation:", 16, 219, 84, 17)
Global $EndMCalc = GUICtrlCreateLabel("End Calculation:", 16, 251, 81, 17)
Global $MStartHrs = GUICtrlCreateCombo("00", 104, 216, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MStartMin = GUICtrlCreateCombo("00", 160, 216, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MStartSec = GUICtrlCreateCombo("00", 216, 216, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MStartMil = GUICtrlCreateCombo("000", 272, 216, 50, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MEndHrs = GUICtrlCreateCombo("00", 104, 248, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MEndMin = GUICtrlCreateCombo("00", 160, 248, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MEndSec = GUICtrlCreateCombo("00", 216, 248, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MEndMil = GUICtrlCreateCombo("000", 272, 248, 50, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $MCalcGo = GUICtrlCreateButton("Calculate Time", 16, 280, 123, 33)
Global $MCalResult = GUICtrlCreateLabel("00:00:00.000", 152, 280, 170, 33)
Global $SetAlarm = GUICtrlCreateLabel("Set Alarm Time:", 16, 355, 86, 17)
Global $AlarmHrs = GUICtrlCreateCombo("00", 104, 352, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $AlarmMin = GUICtrlCreateCombo("00", 160, 352, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $AlarmSec = GUICtrlCreateCombo("00", 216, 352, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $AlarmMil = GUICtrlCreateCombo("000", 272, 352, 50, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $AlarmOn = GUICtrlCreateButton("ON", 16, 384, 147, 25)
Global $AlarmOff = GUICtrlCreateButton("OFF", 176, 384, 147, 25)
Global $Stopwatch = GUICtrlCreateLabel("00:00:00.000", 40, 448, 255, 33)
Global $StopwatchStart = GUICtrlCreateButton("START", 11, 504, 75, 25)
Global $StopwatchStop = GUICtrlCreateButton("STOP", 91, 504, 75, 25)
Global $StopwatchCont = GUICtrlCreateButton("CONTINUE", 171, 504, 75, 25)
Global $StopwatchReset = GUICtrlCreateButton("RESET", 251, 504, 75, 25)
Global $SetCntdwn = GUICtrlCreateLabel("Set Countdown:", 16, 579, 80, 17)
Global $CountHrs = GUICtrlCreateCombo("00", 104, 576, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $CountMin = GUICtrlCreateCombo("00", 160, 576, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $CountSec = GUICtrlCreateCombo("00", 216, 576, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $CountMil = GUICtrlCreateCombo("000", 272, 576, 50, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
Global $Countdown = GUICtrlCreateLabel("00:00:00.000", 40, 616, 250, 41)
Global $CountStart = GUICtrlCreateButton("START", 11, 672, 75, 25)
Global $CountStop = GUICtrlCreateButton("STOP", 91, 672, 75, 25)
Global $CountCont = GUICtrlCreateButton("CONTINUE", 171, 672, 75, 25)
Global $CountReset = GUICtrlCreateButton("RESET", 251, 672, 75, 25)
Global $Exit = GUICtrlCreateButton("EXIT", 232, 720, 91, 33)
#EndRegion ### END Koda GUI section ###
ConsoleWrite(TimerDiff($Timer) & "ms nach GUI Erstellung" & @CRLF)
; #####################################################################
; # Other Global Values To Declare
; #####################################################################
Global $nMsg = 0
Global $popupMsg = 0
Global $elapsedMS = 0
Global $MDay = 0
Global $DateString = 0
Global $AlarmSet = False
Global $AlarmTargetMS = 0
Global $hAlarmPopup = 0
Global $bAlarmPopupVisible = False
Global $btnAlarmOK = 0
Global $runrunrun = 0 ; Timer handle for current running timer
Global $elapsedBeforeStop = 0 ; Accumulated elapsed time before last stop
Global $isRunning = False ; Stopwatch running state
Global $g_CountdownTotalMS = 0 ; Total countdown duration (fixed)
Global $g_CountdownRemainingMS = 0 ; Time left when paused or running
Global $g_CountdownStartTime = 0 ; TimerInit() timestamp for running countdown
Global $g_CountdownRunning = False ; True when countdown is actively running
; #####################################################################
; # Style Values for indivdual Parts
; #####################################################################
GUICtrlSetFont($DayDate, 14, 600, 0, "Consolas")
GUICtrlSetStyle($DayDate, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor($DayDate, -1)
GUICtrlSetFont($Clock, 26, 900, 0, "Consolas")
GUICtrlSetStyle($Clock, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor($Clock, -1)
GUICtrlSetFont($Autocalculation, 20, 600, 0, "Consolas")
GUICtrlSetStyle($Autocalculation, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor($Autocalculation, -1)
GUICtrlSetFont($MCalResult, 18, 600, 0, "Consolas")
GUICtrlSetStyle($MCalResult, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor($MCalResult, -1)
GUICtrlSetState($AlarmOff, $GUI_DISABLE)
GUICtrlSetFont($Stopwatch, 26, 900, 0, "Consolas")
GUICtrlSetStyle($Stopwatch, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor($Stopwatch, -1)
GUICtrlSetState($StopwatchStart, $GUI_ENABLE)
GUICtrlSetState($StopwatchReset, $GUI_DISABLE)
GUICtrlSetState($StopwatchStop, $GUI_DISABLE)
GUICtrlSetState($StopwatchCont, $GUI_DISABLE)
GUICtrlSetFont($Countdown, 26, 900, 0, "Consolas")
GUICtrlSetStyle($Countdown, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor($Countdown, -1)
GUICtrlSetState($CountStart, $GUI_ENABLE)
GUICtrlSetState($CountReset, $GUI_DISABLE)
GUICtrlSetState($CountStop, $GUI_DISABLE)
GUICtrlSetState($CountCont, $GUI_DISABLE)
ConsoleWrite(TimerDiff($Timer) & "ms nach GUI Status setzen" & @CRLF)
AdlibRegister("_SetDay", 1000)
; #####################################################################
; # Main Loop for the actual Application
; #####################################################################
GUICtrlSetData($MStartHrs, $sHours)
GUICtrlSetData($MEndHrs, $sHours)
GUICtrlSetData($AlarmHrs, $sHours)
GUICtrlSetData($CountHrs, $sHours)
GUICtrlSetData($MStartMin, $sMinSec)
GUICtrlSetData($MEndMin, $sMinSec)
GUICtrlSetData($AlarmMin, $sMinSec)
GUICtrlSetData($CountMin, $sMinSec)
GUICtrlSetData($MStartSec, $sMinSec)
GUICtrlSetData($MEndSec, $sMinSec)
GUICtrlSetData($AlarmSec, $sMinSec)
GUICtrlSetData($CountSec, $sMinSec)
GUICtrlSetData($MStartMil, $sMillis)
GUICtrlSetData($MEndMil, $sMillis)
GUICtrlSetData($AlarmMil, $sMillis)
GUICtrlSetData($CountMil, $sMillis)
ConsoleWrite(TimerDiff($Timer) & "ms nach DropDown Befüllung" & @CRLF)
AdlibRegister("_SetClock", 20)
GUISetState(@SW_SHOW)
ConsoleWrite(TimerDiff($Timer) & "ms GUI ist sichtbar" & @CRLF)
While 1
$nMsg = GUIGetMsg()
If $isRunning Then
If $runrunrun <> 0 Then
$totalElapsed = $elapsedBeforeStop + TimerDiff($runrunrun)
Else
$totalElapsed = $elapsedBeforeStop
EndIf
GUICtrlSetData($Stopwatch, FormatTime($totalElapsed))
EndIf
; ausgelagert in AdLib
;Local $aDays[7] = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
;Local $dayOfWeek = _DateToDayOfWeekISO(@YEAR, @MON, @MDAY)
;Local $dayname = $aDays[$dayOfWeek - 1]
; Format the date string
;Local $DateString = $dayname & ", " & @MDAY & "." & @MON & "." & @YEAR
;GUICtrlSetData($DayDate, $DateString)
; ausgelagert in AdLib
; Update label text
;$TimeString = StringFormat("%02d:%02d:%02d.%02d0", @HOUR, @MIN, @SEC, @MSEC / 10)
;GUICtrlSetData($Clock, $TimeString)
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Exit, $MenuExit
ExitLoop
Case $StartCheckBox
If GUICtrlRead($StartCheckBox) = $GUI_CHECKED Then
GUICtrlSetData($StartCheckBox, 'GO')
$StartCBTime = TimerInit()
Else
GUICtrlSetData($StartCheckBox, 'Start')
EndIf
Case $StopCheckBox
If GUICtrlRead($StopCheckBox) = $GUI_CHECKED Then
GUICtrlSetData($StopCheckBox, 'END')
; Calculate elapsed time in milliseconds
$elapsedMS = TimerDiff($StartCBTime)
GUICtrlSetData($Autocalculation, FormatTime($elapsedMS))
Else
GUICtrlSetData($StopCheckBox, 'Stop')
EndIf
Case $MCalcGo
_CalculateManualTime()
Case $AlarmOn
_SetAlarm()
$AlarmSet = True
GUICtrlSetState($AlarmOn, $GUI_DISABLE)
GUICtrlSetState($AlarmOff, $GUI_ENABLE)
Case $AlarmOff
_ClearAlarm()
$AlarmSet = False
GUICtrlSetState($AlarmOff, $GUI_DISABLE)
GUICtrlSetState($AlarmOn, $GUI_ENABLE)
Case $StopwatchStart
$runrunrun = TimerInit()
$elapsedBeforeStop = 0
$isRunning = True
GUICtrlSetState($StopwatchStop, $GUI_ENABLE)
GUICtrlSetState($StopwatchStart, $GUI_DISABLE)
GUICtrlSetState($StopwatchReset, $GUI_DISABLE)
GUICtrlSetState($StopwatchCont, $GUI_DISABLE)
Case $StopwatchStop
If $isRunning Then
$elapsedBeforeStop += TimerDiff($runrunrun)
$isRunning = False
EndIf
GUICtrlSetState($StopwatchReset, $GUI_ENABLE)
GUICtrlSetState($StopwatchCont, $GUI_ENABLE)
Case $StopwatchCont
If Not $isRunning Then
$runrunrun = TimerInit()
$isRunning = True
EndIf
GUICtrlSetState($StopwatchReset, $GUI_DISABLE)
GUICtrlSetState($StopwatchCont, $GUI_DISABLE)
Case $StopwatchReset
$elapsedBeforeStop = 0
$isRunning = False
$runrunrun = 0 ; Reset timer handle
GUICtrlSetData($Stopwatch, "00:00:00.000")
GUICtrlSetState($StopwatchStart, $GUI_ENABLE)
GUICtrlSetState($StopwatchReset, $GUI_DISABLE)
GUICtrlSetState($StopwatchStop, $GUI_DISABLE)
GUICtrlSetState($StopwatchCont, $GUI_DISABLE)
Case $CountStart
_ReadyCountdownTimer() ; Sets $g_CountdownTotalMS, $g_CountdownStartTime, $g_CountdownRunning = True
$g_CountdownRemainingMS = $g_CountdownTotalMS
GUICtrlSetState($CountStop, $GUI_ENABLE)
GUICtrlSetState($CountStart, $GUI_DISABLE)
GUICtrlSetState($CountReset, $GUI_DISABLE)
GUICtrlSetState($CountCont, $GUI_DISABLE)
Case $CountStop
; Pause countdown by calculating remaining time
$elapsedMS = TimerDiff($g_CountdownStartTime)
$g_CountdownRemainingMS = $g_CountdownRemainingMS - $elapsedMS
$g_CountdownRunning = False
GUICtrlSetState($CountStop, $GUI_DISABLE)
GUICtrlSetState($CountReset, $GUI_ENABLE)
GUICtrlSetState($CountCont, $GUI_ENABLE)
Case $CountCont
; Continue countdown by restarting timer with remaining time
$g_CountdownStartTime = TimerInit()
$g_CountdownRunning = True
GUICtrlSetState($CountReset, $GUI_DISABLE)
GUICtrlSetState($CountCont, $GUI_DISABLE)
GUICtrlSetState($CountStop, $GUI_ENABLE)
Case $CountReset
$g_CountdownRunning = False
$g_CountdownRemainingMS = 0
$g_CountdownTotalMS = 0
GUICtrlSetData($Countdown, "00:00:00.000")
GUICtrlSetState($CountStart, $GUI_ENABLE)
GUICtrlSetState($CountReset, $GUI_DISABLE)
GUICtrlSetState($CountStop, $GUI_DISABLE)
GUICtrlSetState($CountCont, $GUI_DISABLE)
Case $MenuReset
_AllBackToStartingPosition()
EndSwitch
; Handle alarm popup messages if visible
If $bAlarmPopupVisible Then
$popupMsg = GUIGetMsg($hAlarmPopup)
If $popupMsg = $btnAlarmOK Or $popupMsg = $GUI_EVENT_CLOSE Then
_DestroyAlarmPopup()
EndIf
EndIf
; Alarm checking
If $AlarmSet And Not $bAlarmPopupVisible Then
Local $currentMS = (@HOUR * 3600000) + (@MIN * 60000) + (@SEC * 1000) + @MSEC
If $currentMS >= $AlarmTargetMS Then
;SoundPlay(@ScriptDir & "\alarm.wav", 1)
_CreateAlarmPopup()
_ClearAlarm()
EndIf
EndIf
If $g_CountdownRunning Then
Local $elapsedMS = TimerDiff($g_CountdownStartTime)
Local $remainingMS = $g_CountdownRemainingMS - $elapsedMS
If $remainingMS <= 0 Then
$remainingMS = 0
$g_CountdownRunning = False
GUICtrlSetData($CountHrs, $sHours, "00")
GUICtrlSetData($CountMin, $sMinSec, "00")
GUICtrlSetData($CountSec, $sMinSec, "00")
GUICtrlSetData($CountMil, $sMillis, "000")
GUICtrlSetData($Countdown, "00:00:00.000")
GUICtrlSetState($CountStart, $GUI_ENABLE)
GUICtrlSetState($CountReset, $GUI_DISABLE)
GUICtrlSetState($CountStop, $GUI_DISABLE)
GUICtrlSetState($CountCont, $GUI_DISABLE)
_ShowAlarmPopup()
Else
GUICtrlSetData($Countdown, FormatTime($remainingMS))
EndIf
Else
; Countdown paused — just show remaining time without counting down
GUICtrlSetData($Countdown, FormatTime($g_CountdownRemainingMS))
EndIf
WEnd
; #####################################################################
; # Terminate the Application
; #####################################################################
GUIDelete()
AdlibUnRegister("_SetClock")
AdlibUnRegister("_SetDay")
Exit
; #####################################################################
; # Functions used in the Application
; #####################################################################
Func _CalculateManualTime()
Local $startH = Number(GUICtrlRead($MStartHrs))
Local $startM = Number(GUICtrlRead($MStartMin))
Local $startS = Number(GUICtrlRead($MStartSec))
Local $startMS = Number(GUICtrlRead($MStartMil))
Local $endH = Number(GUICtrlRead($MEndHrs))
Local $endM = Number(GUICtrlRead($MEndMin))
Local $endS = Number(GUICtrlRead($MEndSec))
Local $endMS = Number(GUICtrlRead($MEndMil))
Local $startTotalMS = ($startH * 3600000) + ($startM * 60000) + ($startS * 1000) + $startMS
Local $endTotalMS = ($endH * 3600000) + ($endM * 60000) + ($endS * 1000) + $endMS
Local $diffMS = $endTotalMS - $startTotalMS
If $diffMS < 0 Then $diffMS += 24 * 3600000 ; Handle crossing midnight
GUICtrlSetData($MCalResult, FormatTime($diffMS))
EndFunc ;==>_CalculateManualTime
Func _SetAlarm()
Local $hrs = Number(GUICtrlRead($AlarmHrs))
Local $min = Number(GUICtrlRead($AlarmMin))
Local $sec = Number(GUICtrlRead($AlarmSec))
Local $mil = Number(GUICtrlRead($AlarmMil))
; Convert to milliseconds for easier comparison
$AlarmTargetMS = ($hrs * 3600000) + ($min * 60000) + ($sec * 1000) + $mil
$AlarmSet = True
EndFunc ;==>_SetAlarm
Func _ClearAlarm()
$AlarmSet = False
EndFunc ;==>_ClearAlarm
Func _ShowAlarmPopup()
; Prevent multiple popups
If $hAlarmPopup And WinExists($hAlarmPopup) Then Return
; Create the popup GUI
$hAlarmPopup = GUICreate("Warning", 250, 120, -1, -1, $WS_POPUP + $WS_CAPTION + $WS_SYSMENU)
GUICtrlCreateLabel("Time's UP! Please press OK.", 20, 20, 210, 40, $SS_CENTER)
Local $btnOK = GUICtrlCreateButton("OK", 85, 70, 80, 30)
GUISetState(@SW_SHOW, $hAlarmPopup)
; Handle messages for the alarm popup separately
While 1
Local $msg = GUIGetMsg()
If $msg = $btnOK Or $msg = $GUI_EVENT_CLOSE Then
GUIDelete($hAlarmPopup)
$hAlarmPopup = 0
ExitLoop
EndIf
;Sleep(10) ; Let CPU breathe / not necessary cause "While" is automatically using a sleep
WEnd
EndFunc ;==>_ShowAlarmPopup
Func _CreateAlarmPopup()
$hAlarmPopup = GUICreate("Warning", 250, 120, -1, -1, $WS_POPUP + $WS_CAPTION + $WS_SYSMENU)
GUICtrlCreateLabel("Time's UP! Please press OK.", 20, 20, 210, 40, $SS_CENTER)
$btnAlarmOK = GUICtrlCreateButton("OK", 85, 70, 80, 30)
GUISetState(@SW_SHOW, $hAlarmPopup)
$bAlarmPopupVisible = True
EndFunc ;==>_CreateAlarmPopup
Func _DestroyAlarmPopup()
GUIDelete($hAlarmPopup)
$hAlarmPopup = 0
$bAlarmPopupVisible = False
EndFunc ;==>_DestroyAlarmPopup
; Format milliseconds into 00:00:00.000 string
Func FormatTime($ms)
Local $hours = Int($ms / 3600000)
Local $minutes = Int(Mod($ms, 3600000) / 60000)
Local $seconds = Int(Mod($ms, 60000) / 1000)
Local $milliseconds = Mod($ms, 1000)
Return StringFormat("%02d:%02d:%02d.%03d", $hours, $minutes, $seconds, $milliseconds)
EndFunc ;==>FormatTime
Func _ReadyCountdownTimer()
Local $RCountHrs = Number(GUICtrlRead($CountHrs))
Local $RCountMin = Number(GUICtrlRead($CountMin))
Local $RCountSec = Number(GUICtrlRead($CountSec))
Local $RCountMil = Number(GUICtrlRead($CountMil))
$g_CountdownTotalMS = ($RCountHrs * 3600000) + ($RCountMin * 60000) + ($RCountSec * 1000) + $RCountMil
$g_CountdownStartTime = TimerInit()
$g_CountdownRunning = True
; Set initial display
Local $Countvalues = StringFormat("%02d:%02d:%02d.%03d", $RCountHrs, $RCountMin, $RCountSec, $RCountMil)
GUICtrlSetData($Countdown, $Countvalues)
EndFunc ;==>_ReadyCountdownTimer
Func _AllBackToStartingPosition()
_ClearAlarm()
$AlarmSet = False
GUICtrlSetState($AlarmOff, $GUI_DISABLE)
GUICtrlSetState($AlarmOn, $GUI_ENABLE)
GUICtrlSetData($StartCheckBox, 'Start')
GUICtrlSetData($StopCheckBox, 'Stop')
GUICtrlSetData($Autocalculation, "00:00:00.000")
GUICtrlSetData($MStartHrs, $sHours, "00")
GUICtrlSetData($MEndHrs, $sHours, "00")
GUICtrlSetData($AlarmHrs, $sHours, "00")
GUICtrlSetData($CountHrs, $sHours, "00")
GUICtrlSetData($MStartMin, $sMinSec, "00")
GUICtrlSetData($MEndMin, $sMinSec, "00")
GUICtrlSetData($AlarmMin, $sMinSec, "00")
GUICtrlSetData($CountMin, $sMinSec, "00")
GUICtrlSetData($MStartSec, $sMinSec, "00")
GUICtrlSetData($MEndSec, $sMinSec, "00")
GUICtrlSetData($AlarmSec, $sMinSec, "00")
GUICtrlSetData($CountSec, $sMinSec, "00")
GUICtrlSetData($MStartMil, $sMillis, "000")
GUICtrlSetData($MEndMil, $sMillis, "000")
GUICtrlSetData($AlarmMil, $sMillis, "000")
GUICtrlSetData($CountMil, $sMillis, "000")
GUICtrlSetState($StartCheckBox, $GUI_UNCHECKED)
GUICtrlSetState($StopCheckBox, $GUI_UNCHECKED)
GUICtrlSetData($MCalResult, "00:00:00.000")
$elapsedBeforeStop = 0
$isRunning = False
$runrunrun = 0
GUICtrlSetData($Stopwatch, "00:00:00.000")
GUICtrlSetState($StopwatchStart, $GUI_ENABLE)
GUICtrlSetState($StopwatchReset, $GUI_DISABLE)
GUICtrlSetState($StopwatchStop, $GUI_DISABLE)
GUICtrlSetState($StopwatchCont, $GUI_DISABLE)
$g_CountdownRunning = False
$g_CountdownRemainingMS = 0
$g_CountdownTotalMS = 0
GUICtrlSetData($Countdown, "00:00:00.000")
GUICtrlSetState($CountStart, $GUI_ENABLE)
GUICtrlSetState($CountReset, $GUI_DISABLE)
GUICtrlSetState($CountStop, $GUI_DISABLE)
GUICtrlSetState($CountCont, $GUI_DISABLE)
EndFunc ;==>_AllBackToStartingPosition
Func _SetClock()
$TimeString = StringFormat("%02d:%02d:%02d.%03s", @HOUR, @MIN, @SEC, @MSEC)
GUICtrlSetData($Clock, $TimeString)
EndFunc ;==>_SetClock
Func _SetDay()
If $MDay <> @MDAY Then
$MDay = @MDAY
Local $aDays[] = ["", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
Local $dayname = $aDays[_DateToDayOfWeekISO(@YEAR, @MON, @MDAY)]
; Format the date string
$DateString = $dayname & ", " & @MDAY & "." & @MON & "." & @YEAR
GUICtrlSetData($DayDate, $DateString)
EndIf
EndFunc ;==>_SetDay
Alles anzeigen