1 (изменено: Sgy-x2, 2016-05-24 16:57:13)

Тема: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

Вот есть такой таймер. Помогите сделать отдельное окно GUI и обратным отчетом оставшегося времени.

^f2::
Gui, Destroy
Gui, +AlwaysOnTop +ToolWindow 
Gui, Add, Text, vText01 x25  y92  w150 h15, Hour:
Gui, Add, Text, vText02 x25  y135 w150 h15, Min:
FormatTime, Current_Time, , HH:mm:ss tt
Gui, Add, Text, vTime x100 y200, %Current_Time%
Gui, Show, % (y := !y) ? "" : "Hide"
Gui, Add, Text, vText04 x25  y175 w150 h15, Sec:
Gui, Add, Text, vText05 x110  y72  w150 h15, 
Gui, Add, Text, vText06 x110  y85  w150 h15, 
Gui, Add, Button, x25  y35 w65 h29 , Start
Gui, Add, Edit, vEdit1  x25  y111 w50 h49 r1
Gui, Add, Edit, vEdit2  x25  y151 w50 h49 r1
Gui, Add, Edit, vEdit4  x25  y191 w50 h49 r1

GuiControl,, Edit1, 0
GuiControl,, Edit2, 0
GuiControl,, Edit3, 0

ControlClick, x55 y77, WinTitle

SetTimer, Loop3, 1000
Loop3:
FormatTime, Current_Time, , HH:mm:ss tt
GuiControl, , Time, %Current_Time%
Return

ButtonStart:
SoundBeep, 450, 100
Gui, Submit, NoHide
Gui, Destroy
met1:

ah:=A_Hour+edit1
am:=A_Min+edit2
as:=A_Sec+edit4

met2:

if am>60
{
am:=am-60
ah:=ah+1
goto met2
}

met3:

if as>60
{
as:=as-60
am:=am+1
goto met3
}

ah1:=ah-A_Hour
am1:=am-A_Min
as1:=as-A_Sec

GuiControl,, Text05,  Start %A_Hour% %A_Min% %A_Sec%
GuiControl,, Text06,  Stop %ah% %am% %as%

h:=Edit1*3600000
m:=Edit2*60000
s:=Edit4*1000

sleep %h%
sleep %m%
sleep %s%

SoundBeep, 2000, 250
SoundBeep, 2000, 650
Return

^F1::
goto, ButtonStart
Return

2

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

Sgy-x2, ознакомьтесь с этой темой, отредактируйте заголовок.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

teadrinker
Готово.

4

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

Частично разобрался, но есть небольшая проблема. Код работает нормально, если только не ставить окно  GUI вторым, тогда счетчик попросту не появляется. Собственно его и надо поставить вторым.

!f2::
Gui, Destroy
Gui, +AlwaysOnTop +ToolWindow 
Gui, Add, Text, vText01 w50, Hour:
Gui, Add, Edit, vEdit1 w50
Gui, Add, Text, vText02, Min:
Gui, Add, Edit, vEdit2 w50
Gui, Add, Text, vText03, Sec:
Gui, Add, Edit, vEdit3 w50
Gui, Add, Button, default, Start
Gui, Show, % (l := !l) ? "" : "Hide"

GuiControl,, Edit1, 0
GuiControl,, Edit2, 0
GuiControl,, Edit3, 0
Return

ButtonStart:
Gui, Submit
Gui, Destroy

h1:=Edit1*3600
m1:=Edit2*60
s1:=Edit3
tm:= h1+m1+s1

Restart:
SoundBeep, 450, 100

	Gui, 2:-Caption +ToolWindow +AlwaysOnTop +Lastfound
	Gui, 2:Color, 000111
	WinSet, Transcolor, 000111,
	Gui, 2:Font, s25 Bold, Tempus Sans ITC 
	Gui, 2:Add, Text, cred w150
	Gui, 2:Show, y0 NA
if !n
Loop
{
	Start := A_TickCount

	Timer:
		GuiControl,, Static1, % Format(Rest := tm - ((A_TickCount - Start)// 1000))
		SetTimer, % Rest <= 0 ? "Hide" : "Timer", % "-" (999 - A_MSec) + 100
		Return
	Hide:
		Gui Hide
		SoundBeep, 750, 500
		Return
	Format(NumberOfSeconds)
	{
    time = 19990101
    time += %NumberOfSeconds%, seconds
    FormatTime, mmss, %time%, mm:ss
    return NumberOfSeconds//3600 ":" mmss
	}
}
Else
Return

!f3::
goto, Restart
Return

5

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

Sgy-x2, никто не отвечает, потому что вопрос внятно сформулировать не можете. Писать скрипт целиком никто не хочет, потому что тема не очень интересная, а в чём конкретно у вас проблема — непонятно.
Старайтесь описать задачу более точно и приложить минимально-возможный, но работающий код, демонстрирующий проблему, не нужно приводить весь скрипт целиком.

Sgy-x2 пишет:

Код работает нормально, если только не ставить окно  GUI вторым, тогда счетчик попросту не появляется.

Сейчас у вас второе окно не появляется, потому что вы задали ему полную прозрачность:

	Gui, 2:Color, 000111
	WinSet, Transcolor, 000111,
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: Sgy-x2, 2016-05-26 13:36:01)

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

teadrinker
Странно, мне всегда казалось что я более или менее нормально выражая свои мысли буквами. Ну да ладно.

teadrinker пишет:

Сейчас у вас второе окно не появляется, потому что вы задали ему полную прозрачность:

Ну так правильно, так и должно быть. А теперь проблема.
Если использовать такой код, то все работает.

	Gui, -Caption +ToolWindow +AlwaysOnTop +Lastfound
	Gui, Color, 000111
	WinSet, Transcolor, 000111,
	Gui, Font, s25 Bold, Tempus Sans ITC 
	Gui, Add, Text, cred w150
	Gui, Show, y0 NA

Если использовать такой код, то все не работает. Проблема возникает, когда делаешь окно вторым.

	Gui, 2:-Caption +ToolWindow +AlwaysOnTop +Lastfound
	Gui, 2:Color, 000111
	WinSet, Transcolor, 000111,
	Gui, 2:Font, s25 Bold, Tempus Sans ITC 
	Gui, 2:Add, Text, cred w150
	Gui, 2:Show, y0 NA

7

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

У меня ваш второй код никаких ошибок не выдает. Работает так, как написано — показывает прозрачное окно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

teadrinker пишет:

У меня ваш второй код никаких ошибок не выдает. Работает так, как написано — показывает прозрачное окно.

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

9

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

Запутали, какие именно оба варианта? В последних двух никакого таймера не прописано.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10 (изменено: Sgy-x2, 2016-05-26 15:24:36)

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

teadrinker пишет:

Запутали, какие именно оба варианта? В последних двух никакого таймера не прописано.

Нажать Alt+F2, ввести число, нажать старт. Должен появится таймер в верхней части экрана. Этот вариант не работает.

+ Первый вариант.
!f2::
Gui, Destroy
Gui, +AlwaysOnTop +ToolWindow 
Gui, Add, Text, vText01 w50, Hour:
Gui, Add, Edit, vEdit1 w50
Gui, Add, Text, vText02, Min:
Gui, Add, Edit, vEdit2 w50
Gui, Add, Text, vText03, Sec:
Gui, Add, Edit, vEdit3 w50
Gui, Add, Button, default, Start
Gui, Show, % (l := !l) ? "" : "Hide"

GuiControl,, Edit1, 0
GuiControl,, Edit2, 0
GuiControl,, Edit3, 0
Return

ButtonStart:
Gui, Submit
Gui, Destroy

h1:=Edit1*3600
m1:=Edit2*60
s1:=Edit3
tm:= h1+m1+s1

Restart:
SoundBeep, 450, 100

	Gui, 2:-Caption +ToolWindow +AlwaysOnTop +Lastfound
	Gui, 2:Color, 000111
	WinSet, Transcolor, 000111,
	Gui, 2:Font, s25 Bold, Tempus Sans ITC 
	Gui, 2:Add, Text, cred w150
	Gui, 2:Show, y0 NA
if !n
Loop
{
	Start := A_TickCount

	Timer:
		GuiControl,, Static1, % Format(Rest := tm - ((A_TickCount - Start)// 1000))
		SetTimer, % Rest <= 0 ? "Hide" : "Timer", % "-" (999 - A_MSec) + 100
		Return
	Hide:
		Gui Hide
		SoundBeep, 750, 500
		Return
	Format(NumberOfSeconds)
	{
    time = 19990101
    time += %NumberOfSeconds%, seconds
    FormatTime, mmss, %time%, mm:ss
    return NumberOfSeconds//3600 ":" mmss
	}
}
Else
Return

!f3::
goto, Restart
Return

Тоже самое, но работает. Разница в них строки с 30 по 35

+ Второй вариант.
!f2::
Gui, Destroy
Gui, +AlwaysOnTop +ToolWindow 
Gui, Add, Text, vText01 w50, Hour:
Gui, Add, Edit, vEdit1 w50
Gui, Add, Text, vText02, Min:
Gui, Add, Edit, vEdit2 w50
Gui, Add, Text, vText03, Sec:
Gui, Add, Edit, vEdit3 w50
Gui, Add, Button, default, Start
Gui, Show, % (l := !l) ? "" : "Hide"

GuiControl,, Edit1, 0
GuiControl,, Edit2, 0
GuiControl,, Edit3, 0
Return

ButtonStart:
Gui, Submit
Gui, Destroy

h1:=Edit1*3600
m1:=Edit2*60
s1:=Edit3
tm:= h1+m1+s1

Restart:
SoundBeep, 450, 100

	Gui, -Caption +ToolWindow +AlwaysOnTop +Lastfound
	Gui, Color, 000111
	WinSet, Transcolor, 000111,
	Gui, Font, s25 Bold, Tempus Sans ITC 
	Gui, Add, Text, cred w150
	Gui, Show, y0 NA
if !n
Loop
{
	Start := A_TickCount

	Timer:
		GuiControl,, Static1, % Format(Rest := tm - ((A_TickCount - Start)// 1000))
		SetTimer, % Rest <= 0 ? "Hide" : "Timer", % "-" (999 - A_MSec) + 100
		Return
	Hide:
		Gui Hide
		SoundBeep, 750, 500
		Return
	Format(NumberOfSeconds)
	{
    time = 19990101
    time += %NumberOfSeconds%, seconds
    FormatTime, mmss, %time%, mm:ss
    return NumberOfSeconds//3600 ":" mmss
	}
}
Else
Return

!f3::
goto, Restart
Return

11

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

Sgy-x2, учимся задавать вопросы. Минимально-возможный, но работающий код, демонстрирующий проблему.
Работающий вариант:

Gui, Add, Text, w100
Gui, Show, w120
Sleep, 1000
GuiControl,, Static1, text

Неработающий вариант:

Gui, 2:Add, Text, w100
Gui, 2:Show, w120
Sleep, 1000
GuiControl,, Static1, text

Решение:

Gui, 2:Add, Text, w100
Gui, 2:Show, w120
Sleep, 1000
GuiControl, 2:, Static1, text
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Таймер. Вывод дополнительного окна с обратным отчетом

teadrinker пишет:

Sgy-x2, учимся задавать вопросы. Минимально-возможный, но работающий код, демонстрирующий проблему.

Хорошо, будем работать над собой. Спасибо.