Что нового

Отобразить на label убывающий таймер

iukash

Новичок
Сообщения
19
Репутация
1
Например есть такая конструкция
Код:
$time = 200000
AdlibRegister("mainscript", $time)
$label_time = GUICtrlCreateLabel($time,70,30,30)

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

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
$Time = TimerInit()
$InitTime = 20

GUICreate("Test", 300, 200)

$Label = GUICtrlCreateLabel("", 10, 10, 50, 20)

GUISetState()

Do
	If GUICtrlRead($Label) <> $InitTime - Round(TimerDiff($Time)/1000, 0) Then
		GUICtrlSetData($Label, $InitTime - Round(TimerDiff($Time)/1000, 0))
	EndIf
Until GUIGetMsg() = -3

;)
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
А что значит этот знак <>.
И почему таймер не останавливается на -3???
 

Arei

Скриптер
Сообщения
938
Репутация
115
это знак <> не равно,если я не ошибаюсь.
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
<>
- не равно
Код:
GUIGetMsg() = -3
- это отлов сообщения от окна, при котором происходит его закрытие

Код:
$Time = TimerInit()
$InitTime = 5
$StopTime = 0

GUICreate("Test", 300, 200)

$Label = GUICtrlCreateLabel(-1, 10, 10, 50, 20)

GUISetState()

Do
	If GUICtrlRead($Label) = $StopTime Then
		GUICtrlSetData($Label, "stop")
		Sleep(500)
		Exit
	Else
		If GUICtrlRead($Label) <> $InitTime - Round(TimerDiff($Time)/1000, 0) Then
			GUICtrlSetData($Label, $InitTime - Round(TimerDiff($Time)/1000, 0))
		EndIf
	EndIf
Until GUIGetMsg() = -3


с остановкой таймера
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
Fever сказал(а):
Код:
<>
- не равно
Код:
GUIGetMsg() = -3
- это отлов сообщения от окна, при котором происходит его закрытие

Код:
$Time = TimerInit()
$InitTime = 5
$StopTime = 0

GUICreate("Test", 300, 200)

$Label = GUICtrlCreateLabel(-1, 10, 10, 50, 20)

GUISetState()

Do
	If GUICtrlRead($Label) = $StopTime Then
		GUICtrlSetData($Label, "stop")
		Sleep(500)
		Exit
	Else
		If GUICtrlRead($Label) <> $InitTime - Round(TimerDiff($Time)/1000, 0) Then
			GUICtrlSetData($Label, $InitTime - Round(TimerDiff($Time)/1000, 0))
		EndIf
	EndIf
Until GUIGetMsg() = -3


с остановкой таймера

Спасибо огромное!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
{OverQuoteWarn.SModer}
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
Yashied сказал(а):
[warn]За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, Модератор форума.[/warn]








Тогда предлагаю вообще убрать кнопку "цитировать" рядом с сообщением, если этого делать нельзя! Уж больно строгие правила на вашем форуме, отпугивают молодых пользователей!
 

Fever

Скриптер
Сообщения
308
Репутация
112
iukash [?]
предлагаю вообще убрать кнопку "цитировать"

можна просто выделить нужный участок сообщения и в выпадающем окне нажать цитировать :whistle:
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
Fever сказал(а):
можна просто выделить нужный участок сообщения и в выпадающем окне нажать цитировать :whistle:

Нажимаю в выпадающем окне нажать цитировать и ничего не происходит! Или как это сделать? Что то еще после этого надо нажать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
iukash
Тебе дали предупреждение, а ты сразу взял и плюнул на него? :mad:
Лучше бы подправил свои сообщения.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
А почему нужно использовать цикл для таймера?
Д и зачем так всё усожнять...

Код:
#include <GUIConstantsEx.au3>

$iInitTimer = 5

$hGUI = GUICreate("Timer Test", 200, 150)
$nTimer_Label = GUICtrlCreateLabel("Timer start...", 10, 10, 70, 20)

GUISetState(@SW_SHOW, $hGUI)

AdlibRegister("_SetTimer_Proc", 1000)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _SetTimer_Proc()
	GUICtrlSetData($nTimer_Label, $iInitTimer)
	$iInitTimer -= 1
	
	If $iInitTimer < 0 Then
		Sleep(1000)
		GUICtrlSetData($nTimer_Label, "Timer stop...")
		Sleep(1500)
		Exit
	EndIf
EndFunc
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
Тебе дали предупреждение, а ты сразу взял и плюнул на него?
Я написал свою точку зрения, что если запрещается так цитировать, то следует просто убрать ту кнопку, или сообщение сделать по нажатию на эту кнопку "типо не цитируйте все сообщение"!
Лучше бы подправил свои сообщения.
Впредь постараюсь больше этого не делать!
А почему нужно использовать цикл для таймера?
Д и зачем так всё усожнять...
Ваш код выполняется тольо один раз и выходит, это реализовать не вызывает трудностей! Суть в том чтобы вызывать пользовательскую функцию раз в какое то время (отсчет таймера, потом выполнение фнкции, потом опять таймер) до нажатия выход Exit из скрипта(по закрытию окна например)!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
iukash [?]
Я написал свою точку зрения, что если запрещается так цитировать, то следует просто убрать ту кнопку, или сообщение сделать по нажатию на эту кнопку "типо не цитируйте все сообщение"!
Это не даёт лигитимацию так делать.
Эта кнопка там есть для разумного и умеренного использования, т.е если ответ соответствует длине цитаты.
Ты когда регистрировался на форуме, должен был прочитать правила, там об этом указанно.

Ваш код выполняется тольо один раз и выходит
Это шутка? ты написал...
[?]
Спасибо огромное!
На код который работает также, но в цикле!
Я специально оставил такое поведение.

[?]
Суть в том чтобы вызывать пользовательскую функцию раз в какое то время (отсчет таймера, потом выполнение фнкции, потом опять таймер) до нажатия выход Exit из скрипта(по закрытию окна например)!
Код:
#include <GUIConstantsEx.au3>

$iInitTimer = 5

$hGUI = GUICreate("Timer Test", 200, 150)
$nTimer_Label = GUICtrlCreateLabel("Timer start...", 10, 10, 70, 50)

GUISetState(@SW_SHOW, $hGUI)

AdlibRegister("_SetTimer_Proc", 1000)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _SetTimer_Proc()
    GUICtrlSetData($nTimer_Label, $iInitTimer)
    $iInitTimer -= 1
    
    If $iInitTimer < 0 Then
        Sleep(1000)
        GUICtrlSetData($nTimer_Label, "Timer stop, calling user function...")
        
		_MyFunc()
		
		$iInitTimer = 5
    EndIf
EndFunc

Func _MyFunc()
	MsgBox(64, 'Title', 'User function call', 0, $hGUI)
EndFunc
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
Это шутка? ты написал...
[?]
Цитата
Спасибо огромное!
На код который работает также, но в цикле!
Я специально оставил такое поведение.
Я забыл что тему про цикличность функции в отдельную тему вынес!
 
Верх