找回密码
 加入
搜索
查看: 4238|回复: 3

[GUI管理] 【已解决】GUI事件模式(ONEVENT)下多窗口嵌套如何实现?

[复制链接]
发表于 2013-12-29 22:24:48 | 显示全部楼层 |阅读模式
本帖最后由 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
 楼主| 发表于 2013-12-29 22:25:20 | 显示全部楼层
不知道描述的准确不?
发表于 2013-12-30 12:44:25 | 显示全部楼层
可以根据需要用 Opt('GUIOnEventMode', 0) 和 Opt('GUIOnEventMode', 1) 进行切换处理窗体消息的模式。
像你的代码里,没有切换过,当然要注册响应控件的函数。那个消息循环是不起任何作用的。
 楼主| 发表于 2013-12-31 15:54:29 | 显示全部楼层
回复 3# user3000


    对吼!   我以前这样试过。。。   忘记了!  我试试!   貌似是可以行的耶!  先谢一个!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-2 21:23 , Processed in 0.080483 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表