各位大师,我想写一个延时程序,原程序是这样的:
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 .
请问,如何写,谢谢

解决方案 »

  1.   

    第一種方式:
    有個Sleep的API函數是用於延時的。你在Command1.enabled=True之間,加入調用延時
    CALL SLEEP(延時時間)
    第二種方式:
    通過Timer控件來控制延時。
      

  2.   

    这我试了下,感觉程序像死了一下,能不能这样,不用真假,直接在判定command2按下后,command1能按下,但不能发出命令,要3分钟后行,或者按下后能发命令,但命令内容要3分钟后发出,怎样的思路更合理呢?请教
      

  3.   

    Option Explicit
    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
      

  4.   

    1、你可以使用DateDiff函数达到延迟目的。
    2、可以使用Sleep函数达到延迟目的。
    3、可以使用Gettickcount函数达到延迟目的。
      

  5.   

    这样呀,那用另外一种方法,在头一件事件按下时,记录出当时的日期与时间,
    然后再另一个Command事件中,首先增加判断,计算单击时间与之前记录的时间间隔,如果少于3分钟,则直接Exit sub。
      

  6.   


    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,一般精度要求够了
      

  7.   


    给你改进一下: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。