作者SmallBeeWayn (喵喵叫的蜜蜂猫)
看板Visual_Basic
标题Re: [VB6 ] 编译错误:没有定义这个Sub或Function"
时间Tue Aug 17 02:27:05 2010
在程式码开头家这个
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
※ 引述《dj5115 (阿文)》之铭言:
: 各位高手们!!
: 我设定了一个Command1~4程式内容是一样的
: 但是无法制程.EXE
: 不知道问题错再哪里
: Private Sub Command1_Click()
: Tex1.Text = "连线中" (这里有改过所以不打t没问题)
: MSComm1.Output = "1"
: delayms 100 (错在这里)
改成Sleep 100
: buf = MSComm1.Input
: If buf = "0" Then
: LOAD1.FillColor = RGB(0, 255, 0)
: ElseIf buf = "1" Then
: LOAD1.FillColor = RGB(255, 0, 0)
: Else
: Tex1.Text = "连线失败"
: End If
: End Sub
: 它只出现"编译错误:没有定义这个Sub或Function"
: 请各位帮帮忙!!谢谢
=====================
这样虽然程式可以跑但是有些东西是假指令
=====================
: Private Sub Command1_Click()
: Tex1.Text = "连线中"
: MSComm1.Output = "1"
: Sleep 100
: buf = MSComm1.Input
你虽然改变了显示文件又送出了资料,却没有任何的实质等待
Sleep这个Function就如其名是真的[睡]了
程式在Sleep时间不会有任何处理与回应,这代表
1.你送出改变文字却没有让画面更新,所以这个 "连线中" 并没有发生实质意义
等使用者看到这个字样,已经是Sub Command1_Click结束以後的事情了
2.因为对MSComm1送出资料之後立刻Sleep,Sleep状态下程式是没有动作的
可能甚至连要送出的资料都还没送就Sleep了
光要解决上面这两个问题,通常的方法就是加 DoEvents()
不过有时候只有一个DoEvents不一定保证资料真的已经出去了
另外
3.你的程式将停止回应,在Sleep期间
虽然100毫秒转瞬即逝,但是对视觉呈现还是有影响
=====================
建议的写法:
Tex1.Text = "连线中"
MSComm1.Output = "1"
TimerStart = 现在时间
Do Until MSComm1.有资料进来 或 (现在时间-TimerStart > 100)
DoEvents()
Sleep(1)
Loop
buf = MSComm1.Input
====================
此外,为了避免Comm中有之前通信留下的资料
在开始连线检查前应该先将接收快取清空
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.180.163