写一个正计时倒计时程序遇到的问题_真奇怪

「已注销」 2009-04-30 04:57:18
代码在下面的网盘里。没看出代码有啥问题,但是倒计时时间到了,就会发声及弹消息框,我点了消息框的确定,就又会发声和弹消息框,一直这么重复。我在代码里没有让它这么执行呀,怎么他就一直重复。请各位看看怎么解决。

代码:

http://www.namipan.com/d/774f77a8089c7be839c4c1b1fa9ed78c7270680c241d0000
...全文
112 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-04-30
  • 打赏
  • 举报
回复
谢谢各位,已解决。
Tiger_Zhao 2009-04-30
  • 打赏
  • 举报
回复
给个正确的吧
'Form1
Option Explicit

Dim dtTime As Date

Public Sub CountDown()
dtTime = DateAdd("s", -1, dtTime)
Text1.Text = dtTime

If DateDiff("s", 0, dtTime) <= 0 Then
timeKillEvent hMMTimer
Command1.Caption = "Start"
MsgBox "时间到"
End If
End Sub

Private Sub Command1_Click()
If Command1.Caption = "Start" Then
dtTime = CDate(Text1.Text)
hMMTimer = timeSetEvent(1000, 0, AddressOf TimerProc, 0, TIME_PERIODIC Or TIME_CALLBACK_FUNCTION)
Command1.Caption = "Stop"
Else
timeKillEvent hMMTimer
Command1.Caption = "Start"
End If
End Sub

Private Sub Form_Load()
Command1.Caption = "Start"
Text1.Text = "00:00:05"
Timer1.Enabled = False
End Sub

'Module1
Option Explicit

Public Const TIME_ONESHOT = 0 'Event occurs once, after uDelay milliseconds.
Public Const TIME_PERIODIC = 1 'Event occurs every uDelay milliseconds.
Public Const TIME_CALLBACK_EVENT_PULSE = &H20 'When the timer expires, Windows calls thePulseEvent function to pulse the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_EVENT_SET = &H10 'When the timer expires, Windows calls theSetEvent function to set the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_FUNCTION = &H0 'When the timer expires, Windows calls the function pointed to by the lpTimeProc parameter. This is the default.

Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
Public hMMTimer As Long

Sub TimerProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
Form1.CountDown
End Sub
「已注销」 2009-04-30
  • 打赏
  • 举报
回复
按照您说的改了还不行。请指点。
Tiger_Zhao 2009-04-30
  • 打赏
  • 举报
回复
回调函数声明错误,应该如
Sub TimerProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
「已注销」 2009-04-30
  • 打赏
  • 举报
回复
注:此代码有一些特殊,请看代码。
「已注销」 2009-04-30
  • 打赏
  • 举报
回复
请看代码内容,时间到了就应该停了。
嗷嗷叫的老马 2009-04-30
  • 打赏
  • 举报
回复
同上
Tiger_Zhao 2009-04-30
  • 打赏
  • 举报
回复
到点要先把定时器关掉,在发声。

7,762

社区成员

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

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