타이머 컨트롤을 사용하려면 반드시 컨트롤이 필요하며, 컨트롤은 반드시 폼을 필요한다. 따라서 타이머 컨트롤을 사요하기 위해서는 폼이 필요하다. 그러나 일반 모듈 같은 곳에서 타이머를 사용하려면 방법이 없는 것은 아니다. API를 사용하여 타이머를 사용할 수 있다. SetTimer로 타이머를 작동시키고 KillTimer로 지정된 타이머를 삭제할수 있다.

다음은 소스이다.
'일반 모듈이다.
' 윈도우 없이 타이머를
Option Explicit

Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Public state As Boolean ' 타이머 종료 프로시저 호출 상태
Public ID As Long ' 타이머 ID

Sub main()
    ID = SetTimer(0&, 1000, 100, AddressOf TimerProc)
    Form1.Show
End Sub

' 타이머 프로시저
Public Sub TimerProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
    Debug.Print state '
End Sub

다음은 폼 모듈이다.
Option Explicit

Private Sub Command1_Click()
    state = True
    KillTimer 0&, ID ' 타이머를 제거한다.
End Sub

여기서 폼 모듈은, KillTimer의 호출 여부를  확인 하기 위한 상태 변수를 지정하기 위함이다.
소스를 실행시키면 직접 실행창에 KillTimer의 호출 상태를 나타내는 State의 상태 값이 쭉 표시된다.
폼의 커맨드 버튼을 누름과 거의 동시에 State 상태 값이 출력되는 것이 정지되는 볼수 있다. 즉 타이머가 삭제된 것이다.

+ Recent posts