找回密码
 加入
搜索
查看: 258|回复: 7

关于子程序FUNC里面调用子窗口GUI时,需要等待的问题。

  [复制链接]
发表于 2023-10-24 08:57:41 | 显示全部楼层 |阅读模式
本帖最后由 zdphj 于 2023-10-24 09:55 编辑

各位大佬,本人有个小程序,今日增加新功能,子程序FUNC执行过程中,根据条件,符合就显示子窗口GUI,一个下拉选择框,需要用户选择确认后,再继续执行后面的代码,现在问题就是,子窗口出来后,如何让代码暂停等待选择?


代码大致如下:

;主程序
......
;选择界面,可以这里,也可以在下面open()里,位置二选一
$gui = GUICreate("用户选择",230,70,-1,-1,$WS_BORDER,$WS_EX_TOPMOST)
$user = GUICtrlCreateCombo("请选择登陆用户", 40, 10, 150, 20)
$ok = GUICtrlCreateButton("确定", 190, 10, 40, 22)
.......
While 1
    $msg = GUIGetMsg()
    Switch $msg
        case ....
            ........
    endswitch
wend
....

;这里是双击项目,相应事件
func WM_NOTIFY(....)
    ....
    switch ...
        case $NM_DBLCLK
             open()                  ;双击项目,执行脚本
    endswitch
endfunc

;这里是双击项目后执行的脚本
func open()
    if 条件符合 then
        .......
        ;选择界面,可以这里,也可以在上面主程序里,位置二选一
        GUICtrlSetData($user, $assh)
        GUISetState(@SW_SHOW, $gui)     
        ;显示选择GUI界面,等待选择后再继续向下执行
        ;问题是这里如何等待,如果不用WHILE $MSG=GUIGETMSG(),程序会不等待选择继续;如果用了,选择GUI出来就会卡死,界面都显示不完整
        ;我目前的选择如下,很LOW
        MsgBox(4096, $pcmsg[1], "选择登陆用户并确认!")
        $tmp_user = GUICtrlRead($user)
        GUISetState(@SW_HIDE, $gui)
        GUICtrlDelete($gui)
       ;用MSGBOX暂停,等选择完后确认,再继续,但是这样会出现GUI选择框和MSGBOX框,很LOW很LOW
        ...........
endfunc


精简代码见附件




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2023-10-24 09:49:52 | 显示全部楼层
afan 发表于 2023-10-24 09:26
如此的话改事件模式估计也会很麻烦。所以,只有精简一个示例脚本才好针对性解决~

大佬,我把代码精简了,但是,无法上传附件,怎么破?
发表于 2023-10-24 09:14:25 | 显示全部楼层
用事件模式,或使用 GUIGetMsg(1) 高级模式。
如有可重现问题的精简可运行示例脚本,秒解。
 楼主| 发表于 2023-10-24 09:17:42 | 显示全部楼层
afan 发表于 2023-10-24 09:14
用事件模式,或使用 GUIGetMsg(1) 高级模式。
如有可重现问题的精简可运行示例脚本,秒解。

感谢大佬回复,主要是主程序GUI控件和CASE太多了,如果改为高级模式,涉及到要修改的地方太多了。
发表于 2023-10-24 09:26:22 | 显示全部楼层
zdphj 发表于 2023-10-24 09:17
感谢大佬回复,主要是主程序GUI控件和CASE太多了,如果改为高级模式,涉及到要修改的地方太多了。

如此的话改事件模式估计也会很麻烦。所以,只有精简一个示例脚本才好针对性解决~
 楼主| 发表于 2023-10-24 09:56:05 | 显示全部楼层
afan 发表于 2023-10-24 09:26
如此的话改事件模式估计也会很麻烦。所以,只有精简一个示例脚本才好针对性解决~

大佬,附件我发出来了,精简后的代码,保留了最基本功能,只能点击左边树形菜单
发表于 2023-10-24 10:53:53 | 显示全部楼层
这种案例用事件模式操作比较好
发表于 2023-10-28 00:39:52 | 显示全部楼层
给个建意,可以用  AdlibRegister  和 AdlibUnRegister  来做个判断执行!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 06:32 , Processed in 0.075188 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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