各位大师,我想写一个延时程序,原程序是这样的:
Private Sub Command1_Click()
Command1.BackColor = RGB(0, 255, 0) '...按下命令1钮,变绿色Command2.BackColor = vbWhite '...命令2钮,变白色
Command1.Enabled = False
Command2.Enabled = True
End Sub
Private Sub Command2_Click()
Command2.BackColor = vbRed '...按下命令2钮,变红色
Command1.BackColor = vbWhite '...命令1钮,变白色
Command2.Enabled = False
Command1.Enabled = True
End Sub
Private Sub Form_Load()
Command1.Enabled = True '程序开始时,命令1钮有效
Command2.Enabled = False '程序开始时,命令2钮无效
End Sub
在command2按下后,这时要能延时3分钟后,才能让command1变成true .
请问,如何写,谢谢
Private Sub Command1_Click()
Command1.BackColor = RGB(0, 255, 0) '...按下命令1钮,变绿色Command2.BackColor = vbWhite '...命令2钮,变白色
Command1.Enabled = False
Command2.Enabled = True
End Sub
Private Sub Command2_Click()
Command2.BackColor = vbRed '...按下命令2钮,变红色
Command1.BackColor = vbWhite '...命令1钮,变白色
Command2.Enabled = False
Command1.Enabled = True
End Sub
Private Sub Form_Load()
Command1.Enabled = True '程序开始时,命令1钮有效
Command2.Enabled = False '程序开始时,命令2钮无效
End Sub
在command2按下后,这时要能延时3分钟后,才能让command1变成true .
请问,如何写,谢谢
有個Sleep的API函數是用於延時的。你在Command1.enabled=True之間,加入調用延時
CALL SLEEP(延時時間)
第二種方式:
通過Timer控件來控制延時。
Dim tcount As LongPrivate Sub Command1_Click()
Command1.BackColor = RGB(0, 255, 0) '...按下命令1钮,变绿色
Command2.BackColor = vbWhite '...命令2钮,变白色
Command1.Enabled = False
Command2.Enabled = True
End SubPrivate Sub Command2_Click()
Command2.BackColor = vbRed '...按下命令2钮,变红色
Command1.BackColor = vbWhite '...命令1钮,变白色
Command2.Enabled = False
tcount = 0
Timer1.Enabled = True
End SubPrivate Sub Form_Load()
Command1.Enabled = True '程序开始时,命令1钮有效
Command2.Enabled = False '程序开始时,命令2钮无效
Timer1.Enabled = False
Timer1.Interval = 1000 '1秒延时
tcount = 0
End SubPrivate Sub Timer1_Timer()
If tcount < 180 Then
tcount = tcount + 1
Else
Command1.Enabled = True
Timer1.Enabled = False
End If
End Sub
2、可以使用Sleep函数达到延迟目的。
3、可以使用Gettickcount函数达到延迟目的。
然后再另一个Command事件中,首先增加判断,计算单击时间与之前记录的时间间隔,如果少于3分钟,则直接Exit sub。
Private Declare Function timeGetTime Lib "winmm.dll" () As LongPrivate Sub WaitTime(Delay As Long)
Dim SaveTime As Double
SaveTime = timeGetTime '记下开始时的时间
While timeGetTime < SaveTime + Delay '循环等待
DoEvents '转让控制权,以便让操作系统处理其它的事件
Wend
End Sub
用这个延时不会假死,传入参数单位是1ms,一般精度要求够了
给你改进一下:Private Sub WaitTime(Delay As Long)
Dim LastTime As Long 'timeGetTime返回的是Long,double只会降低效率
LastTime = timeGetTime
Do While timeGetTime()-LastTime < Delay
DoEvents
Sleep(0)'让程序把不用的时间片让出来,否则你的CPU占用率会很高
Loop
End SubPS:虽然timeGetTime()的单位是1ms,但是实际上它的精度没有那么高,一般在5ms左右。要更高的精度得用QPF和QPC。