【已解决】GUI事件模式(ONEVENT)下多窗口嵌套如何实现?
本帖最后由 sdlyfjx 于 2013-12-31 16:21 编辑实在不知道该肿么描述这个问题的题目了。。。不知道这样说怎么样呢?问题详细是酱紫的:做了一个脚本,用的是ONEVENT模式然后各个按键对应的是各个函数(guictrlsetonevent)注册的
然后比如说按了button1进入了button1函数
想在button1函数内部继续弹出一个对话框,让用户选择时间,然后有个确定按钮,有个取消按钮。
如果说再为这两个按钮注册函数就太麻烦了 而且需要更多的GLOBAL变量不知道有没有别的方法呢? 为什么@gui_ctrlid不管用呢?
正确的代码如下:
Func StartClick();开始刷课函数 这已经是一个由GUI界面上的START按钮响应的函数了
If GUICtrlRead($kcmdList) = "" Then
GUICtrlSetData($StateShow,@CRLF&"选课名单为空→")
Return
ElseIf $reTime = -1 Then
GUICtrlSetData($StateShow,"←请选择刷课模式"&@CRLF&@CRLF&"↓间隔时间↓")
Return
EndIf
If MsgBox(4,"注意!","请核对好已填写的选课列表,是否现在开始选课?") = 7 Then
Return
EndIf
;#################倒计时代码段###########################
If MsgBox(4,"是否定时","是否启用定时刷课功能?否,则现在开始刷课") = 6 Then
Local $n,$m,$o opt('GUIOnEventMode',0) ;切换到消息循环模式
GUICreate("请选择开始时间", 300, 50, 800, 200,BitOR($WS_CAPTION,$WS_POPUP))
$n = GUICtrlCreateDate("", 10, 10, 150, 30)
$DTM_SETFORMAT_ = 0x1032 ; $DTM_SETFORMATW
$style = "yyyy/MM/dd HH:mm:ss"
GUICtrlSendMsg($n, $DTM_SETFORMAT_, 0, $style)
$m = GUICtrlCreateButton("确定",190,10,40,30)
$o = GUICtrlCreateButton("取消",240,10,40,30)
GUISetState()
While True $msg = GUIGetMsg()
If$msg = $m Then
$endtime = GUICtrlRead($n)
ExitLoop
ElseIf $msg = $o Then
ExitLoop
EndIf
WEnd
GUIDelete() opt('GUIOnEventMode',1) ;根据需要设置会事件模式
$spantime = _DateDiff("s",_NowCalc(),$endtime)
If $spantime < 0 Then
MsgBox(0,'',"时间设置错误!请重试")
Return
EndIf
Local $h,$m,$s
Do
_TicksToTime($spantime*1000,$h,$m,$s)
$t = StringFormat("%02d小时%02d分%02d秒",$h,$m,$s)
GUICtrlSetData($StateShow,'距离开始还有:'&@CRLF&$t)
$spantime -= 1
Sleep(1000)
Until $spantime <= 1
GUICtrlSetData($StateShow,@CRLF&"刷课间隔:"&$reTime&"秒")
$XKxmlhttp.open("GET","http://"&$node&"/隐藏他",False)
$XKxmlhttp.setRequestHeader("Cache-Control","no-cache")
$XKxmlhttp.setRequestHeader("If-Modified-Since", "0")
Do
$XKxmlhttp.send()
Sleep(2000)
Until Not StringRegExp($XKxmlhttp.responsetext,"错误信息",0)
Else
$XKxmlhttp.open("GET","http://"&$node&"/隐藏他",False)
$XKxmlhttp.setRequestHeader("Cache-Control","no-cache")
$XKxmlhttp.setRequestHeader("If-Modified-Since", "0")
$XKxmlhttp.send()
If StringRegExp($XKxmlhttp.responsetext,"错误信息",0) Then
MsgBox(0,"⊙▂⊙","选课入口未开放,不允许选课。"&@CRLF&"请根据服务器时间和开放时间进行选课!")
Return
EndIf
EndIf
;##############################定时刷课代码结束################################# 下面进行其他的处理就可以了!······
endfunc
不知道描述的准确不? 可以根据需要用 Opt('GUIOnEventMode', 0) 和 Opt('GUIOnEventMode', 1) 进行切换处理窗体消息的模式。
像你的代码里,没有切换过,当然要注册响应控件的函数。那个消息循环是不起任何作用的。 回复 3# user3000
对吼! 我以前这样试过。。。 忘记了!我试试! 貌似是可以行的耶!先谢一个!
页:
[1]