如何做一个时钟类?

dongge2000 2005-09-06 04:20:15
想做一个时钟类,在没有窗体时可以用。

用了API那个多媒体定时器,还要放BAS文件中,BAS文件无法产生CLASS中的事件。求解。
---------------------------
目地:
在模块中用Private WithEvents MyTime As TimeClass并MyTime.Interval=1000

就能每秒都有一个MyTime_Timer()事件。
Private Sub MyTime_Timer()
'…………
End Sub
...全文
283 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongge2000 2005-09-15
  • 打赏
  • 举报
回复
最后,还是用了:cnapc(明月照大江),兄弟的方法了,虽然卑鄙了点,不过真好用。
xiaoyaolz 2005-09-13
  • 打赏
  • 举报
回复
用api的timer还是不错的,不要用wimm.dll 那个就行
cnapc 2005-09-07
  • 打赏
  • 举报
回复
简单的解决方法(这里头有<简单即美>的意见),建一个类模块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
VBToy 2005-09-07
  • 打赏
  • 举报
回复
withevents只能用在对象模块中,在bas文件中要使用事件恐怕是不可能的了。如果非得调用时钟类的事件而不用窗体,可以在另一个类文件中使用该时钟类,把要实现的功能放在类文件中。
dongge2000 2005-09-07
  • 打赏
  • 举报
回复
请参考API的SetTimer,VB的TIMER控件就是用它做出来的,所以你也可以用来创建自己的定时器。当然使用的时候一定要有自己的窗体。
---------------------------------
那个偶用过,就是上面偶说的API多媒体定时器。

但它的FUN一定要定义在BAS文件中(不在BAS中VB的AddressOf找不到地址),而我不知道如何在BAS文件中产生自己定义的CLASS中的事件。
dongge2000 2005-09-07
  • 打赏
  • 举报
回复
那两天要的急,先是这样考虑的,后来觉得CPU实在是不行的了,还是用了 timer 控件做的,呵呵
这几天忙着往公司跑,还没来得及想...
---------------------------------
死循环这东西CPU吃不消哦,如没有其它的占系统程序运行,它能吃掉大半的CPU时间。

偶以前都试过把进程优先级调低来减CPU占用,也是不行的。
dongge2000 2005-09-07
  • 打赏
  • 举报
回复
请参考API的SetTimer,VB的TIMER控件就是用它做出来的,所以你也可以用来创建自己的定时器。当然使用的时候一定要有自己的窗体。
----------------------------------------
呵呵,我就是不要有窗体的啊!
province_ 2005-09-06
  • 打赏
  • 举报
回复
请参考API的SetTimer,VB的TIMER控件就是用它做出来的,所以你也可以用来创建自己的定时器。当然使用的时候一定要有自己的窗体。
Andy__Huang 2005-09-06
  • 打赏
  • 举报
回复
這個不一定要類來完成,也可以考慮寫一個控件來做
faysky2 2005-09-06
  • 打赏
  • 举报
回复
mark
yinweihong 2005-09-06
  • 打赏
  • 举报
回复
那两天要的急,先是这样考虑的,后来觉得CPU实在是不行的了,还是用了 timer 控件做的,呵呵
这几天忙着往公司跑,还没来得及想...
yinweihong 2005-09-06
  • 打赏
  • 举报
回复
我上次做了一下,我是用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好高啊!!!!!!!!!!!!!!!!!!!!!!!
AndyFunction 2005-09-06
  • 打赏
  • 举报
回复
up
cumtbwxj 2005-09-06
  • 打赏
  • 举报
回复
up
viena 2005-09-06
  • 打赏
  • 举报
回复
丁页~
dongge2000 2005-09-06
  • 打赏
  • 举报
回复
自己顶一顶

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧