Функция _Timer_GetTimerID

 ↑  ←  Описание функции


_Timer_GetTimerID

Возвращает идентификатор ID таймера из $iwParam

#include <Timers.au3>
_Timer_GetTimerID($iwParam)

Параметры

$iwParam Определяет идентификатор события таймера.

Возвращаемое значение

Успех:Возвращает идентификатор ID таймера
Ошибка:Возвращает 0

См. также

_Timer_SetTimer

Пример

#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Timers.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>

Global $iMemo, $hStatusBar, $progress, $percent = 0, $direction = 1
Global $iTimer1, $iTimer2

_Example_Events()

Func _Example_Events()
    Local $hGUI, $btn_change, $iWait = 10, $btn_state
    Local $aParts[3] = [75, 330, -1]

    $hGUI = GUICreate("Таймеры с использованием WM_TIMER", 400, 320)
    $iMemo = GUICtrlCreateEdit("", 2, 32, 396, 226, BitOR($WS_HSCROLL, $WS_VSCROLL))
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_state = GUICtrlCreateButton("Запуск прогресса", 70, 270, 120, 25)
    $btn_change = GUICtrlCreateButton("Изменить задержку", 215, 270, 110, 25)
    GUICtrlSetState($btn_change, $GUI_DISABLE)
    $hStatusBar = _GUICtrlStatusBar_Create($hGUI, $aParts)
    _GUICtrlStatusBar_SetText($hStatusBar, "Таймеры")
    _GUICtrlStatusBar_SetText($hStatusBar, @TAB & @TAB & StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC), 2)
    $progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
    GUICtrlSetColor($progress, 0xff0000)
    _GUICtrlStatusBar_EmbedControl($hStatusBar, 1, GUICtrlGetHandle($progress))
    GUISetState()

    GUIRegisterMsg($WM_TIMER, "WM_TIMER")

    ; создание первого таймера, с частотой 1 сек, время в строке состояния
    $iTimer1 = _Timer_SetTimer($hGUI, 1000)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $btn_state
                If GUICtrlRead($btn_state) = "Запуск прогресса" Then
                    ; создание второго таймера, с частотой 10 или 250 мсек, прогресс бар
                    $iTimer2 = _Timer_SetTimer($hGUI, $iWait)
                    If @error Or $iTimer2 = 0 Then ContinueLoop
                    GUICtrlSetData($btn_state, "Остановить прогресс")
                    GUICtrlSetState($btn_change, $GUI_ENABLE)
                Else
                    GUICtrlSetState($btn_change, $GUI_DISABLE)
                    _Timer_KillTimer($hGUI, $iTimer2) ; Прибивает таймер
                    GUICtrlSetData($btn_state, "Запуск прогресса")
                EndIf

            Case $btn_change
                If $iWait = 10 Then ; переключает задержку
                    $iWait = 250
                Else
                    $iWait = 10
                EndIf
                MemoWrite("Таймер для прогресса установлен в: " & $iWait & " миллисекунд")
                $iTimer2 = _Timer_SetTimer($hGUI, $iWait, "", $iTimer2) ; перезапуск таймера с другим интервалом времени
        EndSwitch
    WEnd

    ConsoleWrite("Прибиты все таймеры? " & _Timer_KillAllTimers($hGUI) & @CRLF)
    GUIDelete()
EndFunc   ;==>_Example_Events

; События таймеров
Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $ilParam

    ; Получает идентификатор таймера, вызвавшего функцию
    Switch _Timer_GetTimerID($iwParam)
        Case $iTimer1
            _UpdateStatusBarClock() ; вызов обновления строки состояния
        Case $iTimer2
            _UpdateProgressBar() ; вызов обновления прогресс бара
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_TIMER

Func _UpdateStatusBarClock()
    _GUICtrlStatusBar_SetText($hStatusBar, @TAB & @TAB & StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC), 2)
EndFunc   ;==>_UpdateStatusBarClock2

; Обновляет прогресс бар
Func _UpdateProgressBar()
    $percent += 5 * $direction
    GUICtrlSetData($progress, $percent)
    If $percent = 100 Or $percent = 0 Then $direction *= -1
    If $percent = 100 Then
        GUICtrlSetColor($progress, 0xff0000)
    ElseIf $percent = 0 Then
        GUICtrlSetColor($progress, 0x0000ff)
    EndIf
EndFunc   ;==>_UpdateProgressBar2

; Записывает строку в элемент для заметок
Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite