事件模式—点击GUI按钮开始循环检测后,关闭和其他按钮就无反应了。
问个问题,GUI界面下2个按钮,一个按钮用于启动循环检测,另一按钮用于停止循环检测。但是,在启动循环检测后,点其他的按钮就无效了,关闭窗口也无效,只能从托盘关闭。
请问,如何解决?
#include-once
#include <1.au3> ;公共函数文档
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("仓位核查", 920, 345, 277, 113)
$list=GUICtrlCreateListView("品种|多单|空单|净头寸", 16, 72, 433, 257)
$Button1 = GUICtrlCreateButton("当前持仓", 96, 16, 89, 25)
GUISetState(@SW_SHOW)
;FindTheoryKeepFile()
$Button2 = GUICtrlCreateButton("Button1", 232, 16, 75, 25)
Do
$msg = GUIGetMsg()
While $msg=$Button1
GUICtrlCreateListViewItem ( "IF|10|-1|9" , $list)
Sleep(50)
If $msg<>$Button1 Then ExitLoop
WEnd
; If $msg=$Button1 Then
; GUICtrlCreateListViewItem ( "IF|10|-1|9" , $list)
;Beep ( 1500,100 )
;Beep ( 1500,100 )
;Beep ( 1500,100 )
;Beep ( 1500,100 )
; EndIf
Until $msg = $GUI_EVENT_CLOSE
本帖最后由 xiehuahere 于 2012-11-12 17:11 编辑
回复 1# 莫小漠
你这就不叫“事件模式”。
事件模式需要 Opt("GUIOnEventMode", 1),并且要为每个控件都用GUICtrlSetOnEvent来注册事件响应函数,GUI窗口用GUISetOnEvent来注册。
不用事件模式也可以的,下面供参考:
#include-once
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("仓位核查", 920, 345, 277, 113)
$list = GUICtrlCreateListView("品种|多单|空单|净头寸", 16, 72, 433, 257)
$Button1 = GUICtrlCreateButton("当前持仓", 96, 16, 89, 25)
$Button2 = GUICtrlCreateButton("Button2", 232, 16, 75, 25)
GUISetState(@SW_SHOW)
Local $flag_Interrupt = 0 ;设置中断标志
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ;截获WM_COMMAND消息以处理
Do
$msg = GUIGetMsg()
If $msg = $Button1 Then
$flag_Interrupt = 0
Do
GUICtrlCreateListViewItem("IF|10|-1|9", $list)
Sleep(50)
Until $flag_Interrupt
ElseIf $msg = $Button2 Then
MsgBox(0, 0, "Interrupted!")
EndIf
Until $msg = $GUI_EVENT_CLOSE
Func WM_COMMAND($hWnd, $msg, $wParam, $lParam)
#forceref $hWnd, $Msg
$LoWord = BitAND($wParam, 0x0000FFFF)
If $LoWord = $Button2 Then $flag_Interrupt = 1
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
按Button2中断循环。 回复 2# xiehuahere
非常感谢。
这样实现了。
如果在加个按钮3,
在按钮1正在循环时,在不使用按钮2的前提下,如何使按钮3点击会触发按钮3的func呢? 本帖最后由 xiehuahere 于 2012-11-13 09:05 编辑
回复 3# 莫小漠
这个跟按钮2的实现是一样的,类似处理就行了。
WM_COMMAND函数里:
If $LoWord = $Button2 Or $LoWord = $Button3 Then $flag_Interrupt = 1
你自己理解一下吧。 回复 4# xiehuahere
就是把他循环暂停掉。然后在运行其他的。总之循环事件不能跟其他的一起运行。 回复 5# 莫小漠
对,2#的例子看明白了你自然会了,跟Button2的处理还不是一样的嘛
要暂停掉就是在WM_COMMAND里设置中断标志即可。
运行其他的,在Do...Until循环里处理相应的按钮消息即可。
页:
[1]