用了API那个多媒体定时器,还要放BAS文件中,BAS文件无法产生CLASS中的事件。求解。
---------------------------
目地:
在模块中用Private WithEvents MyTime As TimeClass并MyTime.Interval=1000
就能每秒都有一个MyTime_Timer()事件。
Private Sub MyTime_Timer()
'…………
End Sub
...全文
28316打赏收藏
如何做一个时钟类?
想做一个时钟类,在没有窗体时可以用。 用了API那个多媒体定时器,还要放BAS文件中,BAS文件无法产生CLASS中的事件。求解。 --------------------------- 目地: 在模块中用Private WithEvents MyTime As TimeClass并MyTime.Interval=1000 就能每秒都有一个MyTime_Timer()事件。 Private Sub MyTime_Timer() '………… End Sub
简单的解决方法(这里头有<简单即美>的意见),建一个类模块ClaTime:
Option Explicit
Private WithEvents a As Timer
Public Sub StarTime()
'需要引用这个Form2上的Timer控件(也许有其它方法而不用Form)
'但这儿说是简单的方法,就不去找其它解法了。反正Form2也不会显示出来
Set a = Form2.Timer1
a.Interval = 100
a.Enabled = True
End Sub
Public Sub StopTime()
a.Enabled = False
End Sub
Private Sub a_Timer()
Debug.Print Time 'Timer引发的事件
End Sub
Private Sub Class_Terminate()
Unload Form2
End Sub
'然后在使用时,生成这个类的实例就可以了:
Dim TimeObj As New ClaTime
TimeObj.StarTime
......
TimeObj.StopTime
Set TimeObj = Nothing
我上次做了一下,我是用GetTickCount 循环计算一个一秒的周期,然后不退出(死)循环,让他在每秒内做一次的,呵呵,参考一下,你的那个要求还得好好考虑一下的
Public Function AlarmOneSecond() As Boolean
' Dim OneMin As Single, notReached As Boolean
' notReached = True
' OneMin = GetTickCount() / 1000 '转换到秒
' Do While notReached
' DoEvents
' If (GetTickCount() / 1000 - OneMin) >= 1 Then
' OneMin = OneMin + 1
' 'MsgBox "1秒钟到" '在这里做一秒后该做的事
' Call GenerateData(SingData) '产生随机数据
' If InsertData("testTab", SingData) Then
' Call DelOldData
' End If
' 'notReached = False '要想不退出的话,不要退出死循环,CPU,hao high
' DoEvents
' End If
' Loop
'End Function
CPU好高啊!!!!!!!!!!!!!!!!!!!!!!!