1 (изменено: sergey22, 2017-08-23 18:39:39)

Тема: AHK: Таймеры

Добрый день. В общем я делаю скрипты для своего удобства и много времени ahk до этого не уделял. Но вот у меня возникла проблема: хочу реализовать несколько таймеров по нажатию кнопки для каждого соответственно.  Т.е. например по нажатию кнопки 1 - запускается первый таймер на экране, по нажатию кнопки 2- рядом с первым запускается второй таймер и т.д.

Нашел рабочий вариант таймера и переделал под себя, но вот как сделать что бы несколько работало - не знаю.
Поможете?

Color1 = CSILVER
Color2 = cYellow
Color3 = cAqua
Color4 = cRed
Color5 = cFuchsia
Color6 = CSILVER

Timer(Timer_Name := "ti1", Timer_Opt := "D")
{
	static
	global Timer, Timer_Count
	if !Timer
		Timer := {}
	if (Timer_Opt = "U" or Timer_Opt = "Unset")
		if IsObject(Timer[Timer_Name])
		{
			Timer.Remove(Timer_Name)
			Timer_Count --=
			return true
		}
		else
			return false
	if RegExMatch(Timer_Opt,"(\d+)",Timer_Match)
	{
		if !(Timer[Timer_Name,"Start"])
			Timer_Count += 1
		Timer[Timer_Name,"Start"] := A_TickCount
		Timer[Timer_Name,"Finish"] := A_TickCount + Timer_Match1
		Timer[Timer_Name,"Period"] := Timer_Match1
	}
	if RegExMatch(Timer_Opt,"(\D+)",Timer_Match)
		Timer_Opt := Timer_Match1
	else
		Timer_Opt := "Dq"
	if (Timer_Name = "")
	{
		for index, element in Timer
			Timer(index)
		return
	}
	if (Timer_Opt = "R" or Timer_Opt = "Reset")
	{
		Timer[Timer_Name,"Start"] := A_TickCount
		Timer[Timer_Name,"Finish"] := A_TickCount + Timer[Timer_Name,"Period"]
	}
	Timer[Timer_Name,"Now"] := A_TickCount
	Timer[Timer_Name,"Left"] := Timer[Timer_Name,"Finish"] - Timer[Timer_Name,"Now"]
	Timer[Timer_Name,"Elapse"] := Timer[Timer_Name,"Now"] - Timer[Timer_Name,"Start"]
	Timer[Timer_Name,"Done"] := true
	if (Timer[Timer_Name,"Left"] > 0)
		Timer[Timer_Name,"Done"] := false
	if (Timer_Opt = "D" or Timer_Opt = "Done")
		return Timer[Timer_Name,"Done"]
	if (Timer_Opt = "S" or Timer_Opt = "Start")
		return Timer[Timer_Name,"Start"]
	if (Timer_Opt = "F" or Timer_Opt = "Finish")
		return Timer[Timer_Name,"Finish"]
	if (Timer_Opt = "L" or Timer_Opt = "Left")
		return Timer[Timer_Name,"Left"]
	if (Timer_Opt = "N" or Timer_Opt = "Now")
		return Timer[Timer_Name,"Now"]
	if (Timer_Opt = "P" or Timer_Opt = "Period")
		return Timer[Timer_Name,"Period"]
	if (Timer_Opt = "E" or Timer_Opt = "Elapse")
		return Timer[Timer_Name,"Elapse"]
}

;
Time_Remaining = 0
Show_OSD = 2
CustomColor = %Color1%  
Gui +LastFound +AlwaysOnTop -Caption +ToolWindow  
Gui, Color, %CustomColor%
Gui, Font,  s18  ; Set a large font size (32-point).
Gui, Add, Text, vMyText %Color6%, XXXXX YYYYY  
WinSet, TransColor, %CustomColor% 500
SetTimer, UpdateOSD, 200
Gosub, UpdateOSD  
Gui, Show, x1366 y-15 NoActivate  
return
;

MsToMinSec(i) {
	Return, i < 1 ? "0:0" : ((n := i // g := 60000) ? n : "0") . ":"
		. ((0 < i -= n * g) ? ((n := i // 1000) ) : "0")
} 

UpdateOSD:
MS_Left := 660000-Timer("Timer","L")
Time_Left := MsToMinSec(MS_Left)
if Time_Remaining > 0 
 {
  Gui, Font, %Color5%
  GuiControl, Font, MyText
  GuiControl,, MyText, Stop
 }
else if (Timer("Timer","S") and !Timer("Timer")) {
 if MS_Left between 0 and 300000
 {
  Gui, Font, %Color4%
  GuiControl, Font, MyText
 }
 else if MS_Left between 300001 and 480000 
 {
  Gui, Font, %Color3%
  GuiControl, Font, MyText
 }
 else if MS_Left between 480001 and 660000
 {
  Gui, Font, %Color2%
  GuiControl, Font, MyText
 } 
 GuiControl,, MyText, %Time_Left%
}
else 
{
 Gui, Font, %Color6%
 GuiControl, Font, MyText
 GuiControl,, MyText, Up!
}
return

sc2::
 if Time_Remaining > 0
 {
  Timer("Timer",Time_Remaining)
  Time_Remaining = 0
 }
 else if (Timer("Timer","S") and !Timer("Timer"))
 {
  Time_Remaining := Timer("Timer","L")
  Timer("Timer","U")
 }
 else
  Timer("Timer",660000)
return

2

Re: AHK: Таймеры

Много кода и мало понятно что точно требуется. Но если надо выводить графически, можете это посмотреть.

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

3

Re: AHK: Таймеры

Я пробовал написать класс для создания произвольного кол-ва gui таймеров, но что-то с глобальными переменными gui не сложилось и забросил. Для двух-трех написать то несложно, но лень.

4

Re: AHK: Таймеры

stealzy пишет:

с глобальными переменными gui не сложилось

Всё правильно, переменных gui в таком случае лучше избегать, думаю любую задачу можно решить без них.

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