[已解决]大侠帮忙看看这个循环控制的问题
本帖最后由 lon91ong 于 2011-1-7 09:04 编辑#include <GUIConstantsEx.au3>
;~ Opt("GUIOnEventMode", 1)
Opt('TrayMenuMode',1)
HotKeySet("{F8}","StartEvt")
HotKeySet("{F7}","PauseEvt")
$Form1_1 = GUICreate("GUI测试", 230, 120, 192, 60)
$StartBtn = GUICtrlCreateButton("开始(F8)", 20, 40, 81, 30)
;~ GUICtrlSetOnEvent(-1, "StartEvt")
$PauseBtn = GUICtrlCreateButton("暂停(F7)", 132, 40, 81, 30)
;~ GUICtrlSetOnEvent(-1, "PauseEvt")
GUICtrlSetState($PauseBtn, $GUI_DISABLE);没有开始,不能暂停
GUISetState(@SW_SHOW)
Global $cycle=1
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE ;关闭窗口
ExitLoop
Exit
Case $StartBtn ;开始
StartEvt()
Case $PauseBtn ;停止
PauseEvt()
EndSwitch
WEnd
Func StartEvt()
GUICtrlSetState($StartBtn, $GUI_DISABLE);不能重复开始
GUICtrlSetState($PauseBtn, $GUI_ENABLE) ;激活暂停
While $cycle
;这里放了一些代码
WEnd
EndFunc
Func PauseEvt()
GUICtrlSetState($StartBtn, $GUI_ENABLE) ;激活开始
GUICtrlSetState($PauseBtn, $GUI_DISABLE);关闭暂停
;希望通过改变$cycle的量来控制StartEvt中的死循环停止
If $cycle=1 Then
$cycle=0
EndIf
EndFunc
现在的问题是,暂停按钮总是不管用,而热键F7功能正常!
请大侠帮忙看看,应该怎么改改!
多谢大侠! 再拷一份消息循环控制代码到函数中进行监控就可以~~~
#include <GUIConstantsEx.au3>
;~ Opt("GUIOnEventMode", 1)
Opt('TrayMenuMode', 1)
HotKeySet("{F8}", "StartEvt")
HotKeySet("{F7}", "PauseEvt")
$Form1_1 = GUICreate("GUI测试", 230, 120, 192, 60)
$StartBtn = GUICtrlCreateButton("开始(F8)", 20, 40, 81, 30)
;~ GUICtrlSetOnEvent(-1, "StartEvt")
$PauseBtn = GUICtrlCreateButton("暂停(F7)", 132, 40, 81, 30)
;~ GUICtrlSetOnEvent(-1, "PauseEvt")
GUICtrlSetState($PauseBtn, $GUI_DISABLE);没有开始,不能暂停
GUISetState(@SW_SHOW)
Global $cycle = 1
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE ;关闭窗口
ExitLoop
Exit
Case $StartBtn ;开始
StartEvt()
Case $PauseBtn ;停止
PauseEvt()
EndSwitch
WEnd
Func StartEvt()
GUICtrlSetState($StartBtn, $GUI_DISABLE);不能重复开始
GUICtrlSetState($PauseBtn, $GUI_ENABLE) ;激活暂停
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $PauseBtn ;停止
PauseEvt()
EndSwitch
;这里放了一些代码
ConsoleWrite(@LF & @KBLayout & @CR)
If $cycle Then
ContinueLoop
ElseIf Not $cycle Then
ExitLoop
EndIf
WEnd
EndFunc ;==>StartEvt
Func PauseEvt()
GUICtrlSetState($StartBtn, $GUI_ENABLE) ;激活开始
GUICtrlSetState($PauseBtn, $GUI_DISABLE);关闭暂停
;希望通过改变$cycle的量来控制StartEvt中的死循环停止
If $cycle = 1 Then
$cycle = 0
EndIf
EndFunc ;==>PauseEvt
本帖最后由 lon91ong 于 2011-1-6 15:33 编辑
楼上的方法尽管有效,但还是有个缺点!
当StartEvt()函数的循环体中有Sleep(10000)等待时,暂停按钮的响应不是及时的!
而热键就不存在这个问题,能够做出及时的响应,不知道是为什么?! #include <GUIConstantsEx.au3>
;~ Opt("GUIOnEventMode", 1)
Opt('TrayMenuMode', 1)
HotKeySet("{F8}", "StartEvt")
HotKeySet("{F7}", "PauseEvt")
$Form1_1 = GUICreate("GUI测试", 230, 120, 192, 60)
$StartBtn = GUICtrlCreateButton("开始(F8)", 20, 40, 81, 30)
;~ GUICtrlSetOnEvent(-1, "StartEvt")
$PauseBtn = GUICtrlCreateButton("暂停(F7)", 132, 40, 81, 30)
;~ GUICtrlSetOnEvent(-1, "PauseEvt")
GUICtrlSetState($PauseBtn, $GUI_DISABLE);没有开始,不能暂停
GUISetState(@SW_SHOW)
Global $cycle = 1
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE ;关闭窗口
ExitLoop
Exit
Case $StartBtn ;开始
StartEvt()
Case $PauseBtn ;停止
AdlibUnRegister("_pk")
PauseEvt()
EndSwitch
WEnd
;---------------------------------------/
Func StartEvt()
GUICtrlSetState($StartBtn, $GUI_DISABLE);不能重复开始
GUICtrlSetState($PauseBtn, $GUI_ENABLE) ;激活暂停
Local $pk = 0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $PauseBtn ;停止
PauseEvt()
EndSwitch
;这里放了一些代码(延时执行)……用自动函数替代
;------------------------
If Not $pk Then
AdlibRegister("_pk", 10000)
$pk = 1
EndIf
;-------------------------
If $cycle Then
ContinueLoop
ElseIf Not $cycle Then
ExitLoop
EndIf
WEnd
EndFunc ;==>StartEvt
;---------------------------------------/
Func PauseEvt()
GUICtrlSetState($StartBtn, $GUI_ENABLE) ;激活开始
GUICtrlSetState($PauseBtn, $GUI_DISABLE);关闭暂停
;希望通过改变$cycle的量来控制StartEvt中的死循环停止
If $cycle = 1 Then
$cycle = 0
EndIf
EndFunc ;==>PauseEvt
;---------------------------------------/
Func _pk()
AdlibUnRegister("_pk")
;这里放了一些代码
ConsoleWrite(@LF & @KBLayout & @CR)
GUICtrlSetState($StartBtn, $GUI_ENABLE) ;激活开始
GUICtrlSetState($PauseBtn, $GUI_DISABLE);关闭暂停
$cycle = 0
MsgBox(0,0,"PK结束",2)
EndFunc ;==>_pk
;---------------------------------------/
多谢大侠!
确实有效啊,不过还没有看懂!留着自己慢慢学习吧!
页:
[1]