Timer.cls
上传用户:yayuwl
上传日期:2022-03-18
资源大小:8952k
文件大小:2k
源码类别:

CAD

开发平台:

VBA

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "Timer"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = True
  14. Option Explicit
  15. Private Declare Function GetTickCount Lib "kernel32" () As Long
  16. ' bEnable变量用于控制定时事件的状态,True表示启动定时事件,False表示停止定时事件
  17. Private bEnable As Boolean      ' 当前定时器是否可用
  18. Private intervalTime As Long    ' 间隔的时间(以毫秒为单位)
  19. ' Timer事件是一个每隔固定秒数自动触发的事件,该秒数由Interval属性控制
  20. Public Event Timer()
  21. Private Sub Class_Terminate()
  22.     bEnable = False
  23. End Sub
  24. ' 默认情况下,定时器没有被启动,时间间隔为1000毫秒
  25. Private Sub Class_Initialize()
  26.     bEnable = False
  27.     intervalTime = 1000
  28. End Sub
  29. Public Property Get Enabled() As Boolean
  30.     Enabled = bEnable
  31. End Property
  32. Public Property Let Enabled(ByVal vNewValue As Boolean)
  33.     bEnable = vNewValue
  34.     
  35.     ' 用GetTickCount函数返回从系统开始运行经过的毫秒数
  36.     Dim startTime As Long
  37.     startTime = GetTickCount
  38.     If intervalTime < 1 Then
  39.         MsgBox "Interval属性的值必须是1~32767之间的整数", , "错误"
  40.         Exit Property
  41.     End If
  42.     ' 用循环结构重复触发Timer事件
  43.     Do
  44.         ' 如果定时器已经被关闭,退出循环
  45.         If Not bEnable Then Exit Do
  46.         
  47.         If GetTickCount >= startTime + Interval Then
  48.             startTime = GetTickCount
  49.             RaiseEvent Timer
  50.         End If
  51.         ' 在循环过程中,用DoEvents函数将控制权转让给操作系统,这样可以实现后台运行定时事件的效果
  52.         DoEvents
  53.     Loop
  54. End Property
  55. Public Property Get Interval() As Long
  56.     Interval = intervalTime
  57. End Property
  58. Public Property Let Interval(ByVal vNewValue As Long)
  59.     intervalTime = vNewValue
  60. End Property