Search the Community
Showing results for tags 'digital clock'.
-
Trying to isolate the cause of my parent GUI's graphic becoming contaminated by closing of a child GUI. The example script below creates the parent GUI, then I click a button to display a digital clock, I use keys to start, pause & resume the clock. NOTE: to exit the clock display after the clock has started hold down the 'ESC' key for more than 3seconds. Upon the clock closing the contamination should be evident. #include <Misc.au3> #include <GUIConstants.au3> #include <Date.au3> HotKeySet("{ESC}", "_ExitClock");To Exit Digital Clock use "Esc" key held for >3sec Dim $aXY[2] Global $Init0, $PausedTimer, $iTimerHours, $iTimerMins, $iTimerSecs Global $sec = @SEC Global $hDLL = DllOpen("user32.dll") Global $iEvent = 0 Global $AlarmHour = 0 Global $AlarmMin = 0 Global $AlarmSec = 0 Global $SecSquare = GUICtrlCreateGraphic(0, 0, 0, 0) Global $ClockSquare = GUICtrlCreateGraphic(5, 5, 180, 30);Local Time Global $TimerSquare = GUICtrlCreateGraphic(205, 5, 220, 30);Timer Global $AlarmSquare = GUICtrlCreateGraphic(480, 5, 220, 30);Alarm Time Global $gui Dim $aDigChar[14] _initDigChar($aDigChar) ; Create a GUI with various controls. Local $Form1 = GUICreate("Example") Local $StartB = GUICtrlCreateButton("Use 'Alt+S' to start Clock", 130, 200, 150, 25) Local $PauseB = GUICtrlCreateButton("Use 'Alt+P' to pause Clock", 130, 250, 150, 25) Local $ResumeB = GUICtrlCreateButton("Use 'Alt+R' to resume Clock", 130, 300, 150, 25) GUICtrlSetState($StartB, $GUI_DISABLE) GUICtrlSetState($PauseB, $GUI_DISABLE) GUICtrlSetState($ResumeB, $GUI_DISABLE) Local $OK = GUICtrlCreateButton("Display Clock", 270, 370, 125, 25) ; Display the GUI. GUISetState(@SW_SHOW, $Form1) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idOK ExitLoop Case $OK _DigitalClock() EndSwitch WEnd ; Delete the previous GUI and all controls. GUIDelete($Form1) Func _DigitalClock() $gui = GUICreate("Digital Timer", 702, 40, -1, -1, -1, $WS_EX_TOPMOST) ;$gui = GUICreate("Test", 702, 702) GUISetBkColor(0x000000) GUISetState() $SecSquare = GUICtrlCreateGraphic(0, 0, 0, 0) $ClockSquare = GUICtrlCreateGraphic(5, 5, 180, 30);Local Time $TimerSquare = GUICtrlCreateGraphic(205, 5, 220, 30);Timer $AlarmSquare = GUICtrlCreateGraphic(480, 5, 220, 30);Alarm Time Dim $msg[1] ;$AddMinutes = 10 While 1 ; main loop, waits until @sec changes and then executes main drawing management function While @SEC = $sec $msg = GUIGetMsg(1) If $msg[0] = -3 Then DllClose($hDLL) Return EndIf If _IsPressed("12", $hDLL) Then;'Alt' ConsoleWrite("_IsPressed - Alt Key was pressed." & @CRLF) ; Wait until key is released. While _IsPressed("12", $hDLL); If _IsPressed("53",$hDLL) Then;'s' ConsoleWrite("_IsPressed - 'o' Key was pressed." & @CRLF) start_timer() EndIf If _IsPressed("50",$hDLL) Then;'p' ConsoleWrite("_IsPressed - 'p' Key was pressed." & @CRLF) pause_timer() EndIf If _IsPressed("52",$hDLL) Then;'r' ConsoleWrite("_IsPressed - 'r' Key was pressed." & @CRLF) resume_timer() EndIf Sleep(300);(250) WEnd ElseIf _IsPressed("1B", $hDLL) Then MsgBox($MB_SYSTEMMODAL, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.") ExitLoop EndIf Sleep(10) WEnd _draw() Sleep(50) $sec = @SEC WEnd EndFunc; ==> _DigitalCLock Func _ExitClock();Press Escape key for >5sec Local $Count = 0 If _IsPressed("1B",$hDLL) Then $Return = _KeyPressed("1B", $Count) ConsoleWrite("Escape Key Held for - " & $Return & "mS" & @CRLF) If $Return > 3000 Then DllClose($hDLL) AdlibUnRegister("show_timer") GUIDelete($gui) GUISetState(@SW_ENABLE, $Form1);enable parent GUI GUISetState(@SW_SHOW,$Form1) EndIf Endif EndFunc;==>_ExitClock() Func _KeyPressed($kp_Key, ByRef $kp_Count) $kp_Count += 1 Local $kp_Timer = TimerInit() While _IsPressed("1B") Sleep(100) WEnd Return TimerDiff($kp_Timer) EndFunc ;==>_KeyPressed ;################ Functions from StopwatchUDF.au3 ##################### ; The function that starts or resets the stopwatch Func start_timer() HotKeySet("{NUMPADMULT}") ;disable resume timer HotKeySet("{NUMPADSUB}", "pause_timer") ;enable pause timer $PausedTimer = 0 $Init0 = TimerInit() AdlibRegister("show_timer", 60) EndFunc ;==>start_timer ; The function that pauses the stopwatch Func pause_timer() HotKeySet("{NUMPADSUB}") ;disable pause timer HotKeySet("{NUMPADMULT}", "resume_timer") ;enable resume timer $PausedTimer += Int(TimerDiff($Init0)) AdlibUnRegister() EndFunc ;==>pause_timer ; The function that resumes the stopwatch Func resume_timer() HotKeySet("{NUMPADMULT}") ;disable resume timer HotKeySet("{NUMPADSUB}", "pause_timer") ;enable pause timer $Init0 = TimerInit() AdlibRegister("show_timer", 60) EndFunc ;==>resume_timer Func show_timer() ; _TicksToTime to get hours, mins, seconds _TicksToTime(Int(TimerDiff($Init0) + $PausedTimer), $iTimerHours, $iTimerMins, $iTimerSecs) ;StringFormat to display the time as HH:MM:SS ;ToolTip("HH:MM:SS = " & StringFormat("%02i:%02i:%02i", $iHours, $iMins, $iSecs), 0, 0, "Timer") EndFunc ;==>show_timer ; Exit Func Quit() Exit EndFunc ;==>Quit ;################ Functions from StopwatchUDF.au3 ##################### Func _draw($forceDraw = False) ; calculates angles for min/sec dials, manages execution of drawing routines Local $doDraw = False Sleep(25) ;_drawSec() _DrawClock() _DrawTimer();Digital Cue Timer 00:00:00 _DrawAlarmTime($iEvent);Event no. in Sequence with Hints in test string GUICtrlSetGraphic($SecSquare, $GUI_GR_REFRESH) EndFunc ;==>_draw ;#cs Func _DrawClock();Digital System Time ;return ; manages execution of write commands for HH MM SS characters GUICtrlDelete($ClockSquare) $ClockSquare = GUICtrlCreateGraphic(5, 5, 180, 30);5, 5, 200, 30 _timeWrite(0, Int(@HOUR / 10), "regular", $ClockSquare);e.g. 1pm = 13 /10 =1 _timeWrite(20, Mod(@HOUR, 10), "regular", $ClockSquare);e.g. 1pm = 13Mod10 = 1 with 3 remainder _timeWrite(50, Int(@MIN / 10), "regular", $ClockSquare) _timeWrite(70, Mod(@MIN, 10), "regular", $ClockSquare) _timeWrite(100, Int(@SEC / 10), "regular", $ClockSquare) _timeWrite(120, Mod(@SEC, 10), "regular", $ClockSquare) EndFunc ;==>_drawTime ;#ce Func _DrawTimer();Digital Cue Timer 00:00:00 ;return ; manages execution of write commands for HH MM SS characters GUICtrlDelete($TimerSquare) $TimerSquare = GUICtrlCreateGraphic(205, 5, 220, 30);Timer _timeWrite(0, 13, "Timer", $TimerSquare);C _timeWrite(20, 11, "Timer", $TimerSquare);L _timeWrite(50, 12, "Timer", $TimerSquare);- _timeWrite(80, Int($iTimerHours / 10), "Timer", $TimerSquare) _timeWrite(100, Mod($iTimerHours, 10), "Timer", $TimerSquare) _timeWrite(130, Int($iTimerMins / 10), "Timer", $TimerSquare) _timeWrite(150, Mod($iTimerMins, 10), "Timer", $TimerSquare) _timeWrite(180, Int($iTimerSecs / 10), "Timer", $TimerSquare) _timeWrite(200, Mod($iTimerSecs, 10), "Timer", $TimerSquare) EndFunc ;==>_drawTime ;#cs Func _drawAlarmTime($iEvent);Digital Time ;Return ; manages execution of write commands for HH MM SS characters for the Alarm time GUICtrlDelete($AlarmSquare) $AlarmSquare = GUICtrlCreateGraphic(480, 5, 220, 30) _timeWrite(0, 10, "Alarm", $AlarmSquare);A _timeWrite(20, 11, "Alarm", $AlarmSquare);L _timeWrite(50, 12, "Alarm", $AlarmSquare);- _timeWrite(80, Int($AlarmHour / 10), "Alarm", $AlarmSquare) _timeWrite(100, Mod($AlarmHour, 10), "Alarm", $AlarmSquare) _timeWrite(130, Int($AlarmMin / 10), "Alarm", $AlarmSquare) _timeWrite(150, Mod($AlarmMin, 10), "Alarm", $AlarmSquare) _timeWrite(180, Int($AlarmSec / 10), "Alarm", $AlarmSquare) _timeWrite(200, Mod($AlarmSec, 10), "Alarm", $AlarmSquare) EndFunc ;==>_drawAlarmTime ;#ce Func _timeWrite($pos, $num, $type, $graph) ; $type is "Regular" or "Alarm" or "Timer" ; manages coloring and writing of 7 segement LEDs for time writing _setColorAndPenForWrite(StringMid($aDigChar[$num], 1, 1), $type);0 _line($graph, $pos + 5, 2, $pos + 3, 10) _setColorAndPenForWrite(StringMid($aDigChar[$num], 2, 1), $type);1 _line($graph, $pos + 2, 14, $pos + 0, 22) _setColorAndPenForWrite(StringMid($aDigChar[$num], 3, 1), $type);2 _line($graph, $pos + 5 + 2, 0, $pos + 5 + 8, 0) _setColorAndPenForWrite(StringMid($aDigChar[$num], 4, 1), $type);3 _line($graph, $pos + 2 + 2, 12, $pos + 2 + 8, 12) _setColorAndPenForWrite(StringMid($aDigChar[$num], 5, 1), $type);4 _line($graph, $pos + 2, 24, $pos + 8, 24) _setColorAndPenForWrite(StringMid($aDigChar[$num], 6, 1), $type);5 _line($graph, $pos + 5 + 10, 2, $pos + 3 + 10, 10) _setColorAndPenForWrite(StringMid($aDigChar[$num], 7, 1), $type);6 _line($graph, $pos + 2 + 10, 14, $pos + 10, 22) EndFunc ;==>_timeWrite ;#cs Func _line($graph, $x1, $y1, $x2, $y2);Seven Segment Display ;Return ; draws line for time writing GUICtrlSetGraphic($graph, $GUI_GR_MOVE, $x1 + 2, $y1 + 2) GUICtrlSetGraphic($graph, $GUI_GR_LINE, $x2 + 2, $y2 + 2) EndFunc ;==>_line ;#ce Func _setColorAndPenForWrite($char, $type) ; sets color and pen for next line in time writing, based on '0' or '1' in the DigChar array If $char = "1" Then;7 Segment display ON=1 or OFF=0 If $type = "Alarm" Then GUICtrlSetGraphic($AlarmSquare, $GUI_GR_PENSIZE, 2) GUICtrlSetGraphic($AlarmSquare, $GUI_GR_COLOR, 0xCCCCCC, 0xCCCCCC) ElseIf $type = "Timer" Then GUICtrlSetGraphic($TimerSquare, $GUI_GR_PENSIZE, 2) GUICtrlSetGraphic($TimerSquare, $GUI_GR_COLOR, 0x00ff00, 0x00ff00);ct - Bright Green RGB Else GUICtrlSetGraphic($ClockSquare, $GUI_GR_PENSIZE, 2) GUICtrlSetGraphic($ClockSquare, $GUI_GR_COLOR, 0xEE0000, 0xEE0000) EndIf Else If $type = "Alarm" Then GUICtrlSetGraphic($AlarmSquare, $GUI_GR_PENSIZE, 2) GUICtrlSetGraphic($AlarmSquare, $GUI_GR_COLOR, 0x222222, 0x222222) ElseIf $type = "Timer" Then;ct GUICtrlSetGraphic($TimerSquare, $GUI_GR_PENSIZE, 2) GUICtrlSetGraphic($TimerSquare, $GUI_GR_COLOR, 0x002200, 0x002200);ct - Lite Green RGB Else GUICtrlSetGraphic($ClockSquare, $GUI_GR_PENSIZE, 2) GUICtrlSetGraphic($ClockSquare, $GUI_GR_COLOR, 0x330000, 0x330000) EndIf EndIf EndFunc ;==>_setColorAndPenForWrite Func _drawSec() Return ; draws circle seconds indicator $aXY = _getXY(@SEC, 240) GUICtrlDelete($SecSquare) $SecSquare = GUICtrlCreateGraphic(350 + $aXY[0] - 8, 350 + $aXY[1] - 8, 16, 16) GUICtrlSetGraphic($SecSquare, $GUI_GR_COLOR, 0x0000FF, 0x0000FF) GUICtrlSetGraphic($SecSquare, $GUI_GR_ELLIPSE, 0, 0, 16, 16) EndFunc ;==>_drawSec Func _getXY($sec, $hypo) ; returns array with X,Y coordinates for the seconds points for $sec seconds, with $hypo(tenuse) distance from center Dim $result[2] Local $pi = 3.14159265358979 Local $degToRad = $pi / 180 Local $degrees = $sec * 6 - 90 Local $x = Cos($degrees * $degToRad) * $hypo Local $y = Sin($degrees * $degToRad) * $hypo $result[0] = $x $result[1] = $y Return $result EndFunc ;==>_getXY Func _initDigChar(ByRef $aDigChar) ; define leds for digital numbers: 1 or 0 for leds on/off in 7-led digital clock characters $aDigChar[0] = "1110111" $aDigChar[1] = "0000011" $aDigChar[2] = "0111110" $aDigChar[3] = "0011111" $aDigChar[4] = "1001011" $aDigChar[5] = "1011101" $aDigChar[6] = "1111101" $aDigChar[7] = "0010011" $aDigChar[8] = "1111111" $aDigChar[9] = "1011111" $aDigChar[10] = "1111011" ; A $aDigChar[11] = "1100100" ; L $aDigChar[12] = "0001000" ; - $aDigChar[13] = "1110100" ;C EndFunc ;==>_initDigChar Any help appreciated Thanks Chris
- 3 replies
-
- gui
- graphic contamination
-
(and 2 more)
Tagged with: