Лучше использовать WM_COMMAND в этом случае:
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
;
Global $iTimer = -1
$Form1 = GUICreate("Form1", 265, 42, -1, -1)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 241, 21)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If $iTimer <> -1 And TimerDiff($iTimer) >= 5000 Then
GUICtrlSetData($Input1, "0")
$iTimer = -1
EndIf
WEnd
Func WM_COMMAND($hWnd, $msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Local $hCtrl = $lParam
Switch $nID
Case $Input1
Switch $nNotifyCode
Case $EN_CHANGE, $EN_UPDATE ; Edit (Input) control has been changed
Local $sInput_Data = GUICtrlRead($Input1)
If $sInput_Data = "" Then
$iTimer = TimerInit()
Else
$iTimer = -1
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Sylver Dragon,
Неплохо придумано с секундами, я не думал что так таймер можно построить
Код:
$hTimer = _TimerSec_Init(3)
_TimerSec_Wait($hTimer)
Func _TimerSec_Init($iSec)
Return Mod(@SEC + $iSec, 60)
EndFunc
Func _TimerSec_Wait($hTimer)
Do
Sleep(10)
Until @SEC = $hTimer
EndFunc
P.S
Но в твоём примере, если при ожидании 5-ти секунд юзер вводит данные в поле, то они заменяются на 0 в любом случае.