找回密码
 加入
搜索
查看: 2276|回复: 16

[网络通信] [已解决]请教GUICtrlCreateAvi控件如何获取它的状态?

[复制链接]
发表于 2022-2-11 09:39:11 | 显示全部楼层 |阅读模式
本帖最后由 smooth 于 2022-2-11 21:53 编辑

请教GUICtrlCreateAvi创建的avi控件,如何获取它的状态?
$n = GUICtrlCreateAvi(),不管这个控件是显示,隐藏,还是被删除了,GUICtrlGetState($n)都是返回-1,不知道怎么样获取它的显示、隐藏状态。
发表于 2022-2-11 09:52:28 | 显示全部楼层
失败: 返回 -1, 控件未定义。
 楼主| 发表于 2022-2-11 09:58:06 | 显示全部楼层
itzyx 发表于 2022-2-11 09:52
失败: 返回 -1, 控件未定义。

控件都是可以正常显示或者隐藏的,怎么会失败?

测试了button了和label,显示时会返回80,隐藏时会返回96.
发表于 2022-2-11 10:04:55 | 显示全部楼层
smooth 发表于 2022-2-11 09:58
控件都是可以正常显示或者隐藏的,怎么会失败?

测试了button了和label,显示时会返回80,隐藏时会返 ...

没看到代码,我只是猜测一下,因为你总是返回-1,可能就是控件未定义。。。
发表于 2022-2-11 13:20:22 | 显示全部楼层
你确定GUICtrlGetState获取不到?
 楼主| 发表于 2022-2-11 16:51:55 | 显示全部楼层
afan 发表于 2022-2-11 13:20
你确定GUICtrlGetState获取不到?

我确定,你看一下截图。

本帖子中包含更多资源

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

×
发表于 2022-2-11 17:52:15 | 显示全部楼层
代码不要用贴图
发表于 2022-2-11 18:14:10 | 显示全部楼层
精简且可运行,不知道是有多难
GUICreate('')
Local $idAnimation = GUICtrlCreateAvi(@SystemDir & "\shell32.dll", 165, 15, 0, 300)
GUISetState()
MsgBox(0, '显示', GUICtrlGetState($idAnimation))
GUICtrlSetState($idAnimation, 32)
MsgBox(0, '隐藏', GUICtrlGetState($idAnimation))
 楼主| 发表于 2022-2-11 20:52:26 | 显示全部楼层
本帖最后由 smooth 于 2022-2-11 20:55 编辑
afan 发表于 2022-2-11 18:14
精简且可运行,不知道是有多难

那我不知道我的代码怎么就获取不到。压缩包里面是AVI文件,我不知道是不是因为加载了这个文件导致的。

#include <GUIConstantsEx.au3>
Global $randomdir
For $i = 1 To 10
 $randomdir = $randomdir & Chr(Random(97, 122, 1));生成一个长度为10的随机字符串
Next
DirCreate(@TempDir & "\" & $randomdir)
FileInstall('Findfile.avi', @TempDir & "\" & $randomdir & "\Findfile.avi", 1)
Example()
While 1
 Sleep(10)
 $msg = GUIGetMsg()
 If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
Func Example()
 Local $n, $msg
 GUICreate("My GUI (GetControlState)")
 Global $n = GUICtrlCreateAvi(@TempDir & "\" & $randomdir & "\Findfile.avi", 0, 340, 296, 32, 32, 4)
 Local $button = GUICtrlCreateButton("AAAA", 30, 50, 40, 30)
 Local $label = GUICtrlCreateLabel("BBBB", 30, 90, 40, 30)
 GUISetState()       ; 显示一个空白的窗口
 
 MsgBox(0, 0, GUICtrlGetState($n) & "  " & GUICtrlGetState($button) & "  " & GUICtrlGetState($label))
 
 ;MsgBox(4096, "状态", StringFormat("GUICtrlRead=%d\nGUICtrlGetState=%d", GUICtrlRead($n), GUICtrlGetState($n)))
EndFunc   ;==>Example


本帖子中包含更多资源

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

×
发表于 2022-2-11 21:41:47 | 显示全部楼层
函数内Local了,GUICtrlCreateAvi赋值的却是Global,而取值的是Local。去掉Global即可。
你若用最简代码测试就不会这么武断的发问了。而且自己每次都很肯定,要知道,很多时候别人并不愿过多解释。
 楼主| 发表于 2022-2-11 21:48:39 | 显示全部楼层
afan 发表于 2022-2-11 21:41
函数内Local了,GUICtrlCreateAvi赋值的却是Global,而取值的是Local。去掉Global即可。
你若用最简代码测 ...

不是很理解,我得研究一下,谢谢A大。
发表于 2022-2-11 21:57:48 | 显示全部楼层
afan 发表于 2022-2-11 21:41
函数内Local了,GUICtrlCreateAvi赋值的却是Global,而取值的是Local。去掉Global即可。
你若用最简代码测 ...

楼主在研究global与local的作用范围,用事实证明函数内local是主人。
发表于 2022-2-11 22:21:56 | 显示全部楼层
haijie1223 发表于 2022-2-11 21:57
楼主在研究global与local的作用范围,用事实证明函数内local是主人。

时常提醒函数内不要使用全局变量,除非你知道自己在干撒子。LZ不够重视啊~
发表于 2022-2-11 23:03:17 | 显示全部楼层
本帖最后由 itzyx 于 2022-2-11 23:08 编辑
smooth 发表于 2022-2-11 21:48
不是很理解,我得研究一下,谢谢A大。
Local是强制定义一个局部变量,Global是强制定义一个全局变量,如果在函数外部使用了Local声明变量,那么Local的作用域将扩展到整个代码,这种条件下Local与Global的作用域完全相同。
同时当局部变量与全局变量重名时,局部变量作用域内全局变量会被屏蔽。
举例:
Global $sum = 0
_Plus()
MsgBox(0, "", $sum)
Func _Plus()
Local $sum
Local $x = 1,$y =2
$sum = $x + $y
EndFunc
结果为0,因为在_Plus 函数内全局变量$sum被屏蔽, 所以全局变量$sum的值并没有发生任何改变,仍为0。  希望可以帮到你更好的理解。
发表于 2022-2-12 12:41:00 | 显示全部楼层
itzyx 发表于 2022-2-11 23:03
Local是强制定义一个局部变量,Global是强制定义一个全局变量,如果在函数外部使用了Local声明变量,那么Loca ...

你这个描述并不十分准确,LZ若是这样倒也不会出错~ 不如再添加两行
Global $sum = 0
_Plus()
MsgBox(0, "", $sum)
Func _Plus()
        Local $sum
        Local $x = 1, $y = 2
        $sum = $x + $y
        Global $sum = 100
        MsgBox(0, '', $sum)
EndFunc   ;==>_Plus

评分

参与人数 1金钱 +40 收起 理由
itzyx + 40 赞一个! 不愧是全论坛最细的人

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 17:09 , Processed in 0.089071 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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