1 (изменено: serzh82saratov, 2019-10-14 01:56:39)

Тема: AHK: Часы, таймер, секундомер

Класс позволяет добавлять контролы в виде табло часов. Встроены таймеры для часов, таймера и секундомера. Также с помощью контрола пользователь может выставить нужное ему время.

Ввод времени - LButton, RButton, WheelUp, WheelDown.
MButton - сброс на 00
Ввод доступен в нижнем табло в Demo.


Class ClockGui.

+ Demo.

#SingleInstance Force
#Persistent
#NoEnv
ListLines Off
SetBatchLines -1

Gui, +HWNDhMain -DPIScale
Gui, Color, F9D886


Timer := New ClockGui(hMain, "Sec|Name MyTimer|w 400|h 120|ds 1|db 16|bckgmain F9D886|Font s80 q4|Colon")
Timer.SetTime("10:00:04")  
Timer.StartTimer()
Timer.Show()

Watch := New ClockGui(hMain, "Pos xp y+10|Sec|Name MyWatch|w 400|h 120|ds 1|db 10|bckgmain F9D886|bckgitem FFFFFF|coloritem F9D886|Font s80 q4")
Watch.SetTime("23:59:56")
Watch.StartWatch(, 1) 
Watch.Show()

Clock := New ClockGui(hMain, "Pos xp y+10|Section|w 400|h 120|db 20|bckgitem C0C0C0|coloritem 5671BD|Font s90 q4|FontName Comic Sans MS|Colon Flash 100")
Clock.StartClock()
Clock.Show()

Clock2 := New ClockGui(hMain, "Pos xs+120 y+10|Sec|w 160|h 30|db 6|bckgitem F9D886|coloritem 010101|Font Bold s20 q4|Colon Flash")
Clock2.StartClock()
Clock2.Show()

TestTimer := New ClockGui(hMain, "Pos xs y+10|Sec|Name TestTimer|w 400|h 120|ds 1|db 14|bckgmain 555555|Font s80 q4|Colon Flash 300")
TestTimer.SetTime("00:00:03")
TestTimer.Show()

Gui, Add, Button, xp60 y+20 gTimerStart, Запустить таймер
Gui, Add, Button, x+20 yp gTimerStop, Остановить
Gui, Add, Button, x+20 yp gTimerReset, Сбросить
Gui, Show
Return

TimerStart:
	TestTimer.StartTimer("EndTimer")
	Return

TimerStop:
	TestTimer.Stop(1)
	TestTimer.Block(0)
	Return

TimerReset:
	Gosub, TimerStop
	TestTimer.SetTime("00:00:03")
	Return

EndTimer(This) {
	MsgBox % This.Name "`nВремя вышло"
	(!This.Loop && This.Block(0))
}

GuiClose:
	ExitApp

https://raw.githubusercontent.com/serzh82saratov/ClockGui/master/ClockGui.ahk.png


+ Запуск секундомера и таймера относительно времени суток.

#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1

CheckTime := ClockGui.MathTime("", "+", "00:00:03")   ;	прибавляем к текущему времени три секунды. это будет стартовым временем суток таймера и секундомера

Gui, +HWNDhMain
Gui, Color, F9D886
TestTimer := New ClockGui(hMain, "Sec|Name Timer1|w 400|h 120|ds 1|db 10|bckgmain F9D886|Font s80")
TestTimer.Show()
;	1 - указываем функцию обработчик при наступлении стартового времени. Можно оставить пустым - ""
;	2 - стартовое время. Если пусто, то текущее время. Если "User" то будет взято время установленное в TestTimer вручную
;	3 - если последний параметр правда, то при наступлении стартового времени отсчёт продолжается на следующие сутки
TestTimer.StartTimerDay("EndTimer" , CheckTime, 1)

Clock := New ClockGui(hMain, "Sec|w 400|h 120|db 20|bckgmain F9D886|bckgitem C0C0C0|coloritem 5671BD|Font s80|Colon Flash")
Clock.Show()
Clock.StartClock()

Watch := New ClockGui(hMain, "Sec|Name Watch1|w 400|h 120|ds 1|db 10|bckgmain F9D886|bckgitem FFFFFF|coloritem F9D886|Font s80")
Watch.Show()
Watch.StartWatchDay("EndTimer", CheckTime, 1)

Gui, Show
Return

EndTimer(This) {
	MsgBox % This.Name " - контрольное время " This.CheckDate " достигнуто"
}

GuiClose:
	ExitApp
+ Выставляем время суток, запускаем цикличный таймер до указанного времени.

Более наглядно в след. посте пример "OnStep".


#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1

Gui, +HWNDhMain
Gui, Color, F9D886

Clock := New ClockGui(hMain, "Sec|w 60|h 30|db 6|bckgitem F9D886|coloritem 5671BD|Font Bold|Colon Flash")
Clock.StartClock()
Clock.Show()

Demo := New ClockGui(hMain, "Sec|pos xp+300|w 60|h 30|db 6|bckgitem F9D886|coloritem ff0000|Font Bold|Colon Flash")
Demo.Block(1)

Timer := New ClockGui(hMain, "Sec|pos xm|Name Timer|w 400|h 120|ds 1|db 14|bckgmain 444444|Font s80|Colon Flash")
Timer.SetTime(Timer.MathTime("", "+", "00:01")) ; прибавляем 1 минуту к текущему времени
Timer.Show() 

Gui, Add, Button, xp115 y+10 gTimerStart, Запустить таймер
Gui, Add, Button, x+20 yp gTimerReset, Сброс

Gui, Show
Return

TimerStart:
	Demo.SetTime(Timer.Get())
	Timer.StartTimerDay("EndTimer", "User", 1)
	Demo.Show()
	Return
	
TimerReset:
	Timer.Stop(1)
	Timer.SetTime(Timer.MathTime("", "+", "00:01"))
	Timer.Block(0)
	Demo.Show(0)
	Return
	
EndTimer(This) {
	MsgBox % This.Name " - контрольное время " This.CheckDate " достигнуто"
}

GuiClose:
	ExitApp

https://raw.githubusercontent.com/serzh82saratov/ClockGui/master/Таймер.png


Таймер с мелодией


Укороченный вариант класса с примером, только для вывода часов.


Тема для обсуждения.


3:30 11.07.2018 - добавлено относительное позиционирование

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2 (изменено: serzh82saratov, 2019-10-14 01:48:05)

Re: AHK: Часы, таймер, секундомер

2-я версия.

  • Отсчёт времени не останавливается при показе меню и паузе.

  • Можно изменить размер и все остальные опции (Change).

  • Изменить только цвета (ChangeColor).

  • Опционально добавил ввод цифровыми клавишами. Backspace, Delete, NumpadDot удаляют последний введённый.
    Работает только с оригинальным названием класса.

Совместимо с примерами выше.

+ Demo

#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1

Gui, New, +HWNDhMain -DPIScale
Gui, Color, F9D886

Clock1 := New ClockGui(hMain, "Name Clock1|w 200|h 50|db 20|bckgitem F9D886|coloritem 5671BD|Font s40|FontName Comic Sans MS|Colon Flash")
Clock1.SetTime()
Clock1.Show()
Clock1.StartClock()

Demo := New ClockGui(hMain, "Sec|Name TestTimer|Pos x150 y+100|w 400|h 120|ds 1|db 14|bckgmain F9D886|Font s80")
Demo.SetTime("00:00:00")
Demo.Show()
Demo.NumInput("DemoInputRule") ; без параметра отключит ввод

Gui, Add, Button, xp90 y+20 gTimerStart, Запустить таймер
Gui, Add, Button, x+20 yp gTimerStop, Остановить

Gui, Show, w700 
Sleep 2000
Clock1.Change(hMain, "Sec|Name Clock1|bckgmain F9D886|Pos x50 y50|w 600|h 66|db 30|ds 6|bckgitem ffffff|coloritem 000000|Font s50|Colon Flash 100")
Sleep 2000
  ;	ChangeColor(BckgMain, BckgItem, ColorItem)
  ;	Любой из параметров может быть пустым, в таком случае этот цвет останется прежним.
Clock1.ChangeColor("0000ff", "ff0000", "00ff00")
Return

esc::exitapp

DemoInputRule() {
	Global hMain
	Return WinActive("ahk_id" hMain)
}

TimerStart:
	If Demo.Block()
		Return
	BckgItem := Demo.BckgItem
	If !Demo.IsTimeInDay() || Demo.IsTimeEmpty()
	{
		Demo.ChangeColor("", "ff0000", "")
		Sleep 500
		Demo.ChangeColor("", BckgItem, "")
		Return
	}
	Demo.NumInput()
	Demo.StartTimer("EndTimer") 
	Demo.ChangeColor("", "607CCA", "")
	Sleep 300
	Demo.ChangeColor("", BckgItem, "")
	Return

TimerStop:
	Demo.Stop(1)
	Demo.Block(0)
	Demo.NumInput("DemoInputRule")
	Return
	
EndTimer(This) { 
	BckgItem := This.BckgItem
	This.ChangeColor("", "00ff00", "")
	Sleep 1000
	This.ChangeColor("", BckgItem, "")
	(!This.Loop && This.Block(0))
	This.NumInput("DemoInputRule")
}

+ OnStep

Свойство "OnStep" - указывается имя функции обработчика изменения времени на табло. В параметре принимается экземпляр.


#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1

Gui, +HWNDhMain
Gui, Color, F9D886

Clock := New ClockGui(hMain, "Sec|w 60|h 30|db 6|bckgitem F9D886|coloritem 5671BD|Font Bold|Colon Flash")
Clock.StartClock()
Clock.Show()

Timer := New ClockGui(hMain, "Sec|pos xm|Name Timer|w 400|h 120|ds 1|db 14|bckgmain 444444|Font s80|Colon Flash")
Timer.SetTime(Timer.MathTime("", "+", "00:01")) ; прибавляем 1 минуту к текущему времени
Timer.OnStep := "OnStep"
Timer.Show() 

Demo := New ClockGui(hMain, "Sec|ds 1|db 14|bckgmain F9D886|bckgitem F9D886|Font s80|Colon Flash")
Demo.Block(1)
Demo.Show()

OnStep(Timer)

Gui, Show
Return

OnStep(This) {
	Global Demo 
	Demo.Stop(1)
	Demo.StartTimerDay("", This.Get(), 1)
}  

GuiClose:
	ExitApp


Class ClockGui.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui