smooth 发表于 2022-2-11 09:39:11

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

本帖最后由 smooth 于 2022-2-11 21:53 编辑

请教GUICtrlCreateAvi创建的avi控件,如何获取它的状态?
$n = GUICtrlCreateAvi(),不管这个控件是显示,隐藏,还是被删除了,GUICtrlGetState($n)都是返回-1,不知道怎么样获取它的显示、隐藏状态。

itzyx 发表于 2022-2-11 09:52:28

失败: 返回 -1, 控件未定义。

smooth 发表于 2022-2-11 09:58:06

itzyx 发表于 2022-2-11 09:52
失败: 返回 -1, 控件未定义。

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

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

itzyx 发表于 2022-2-11 10:04:55

smooth 发表于 2022-2-11 09:58
控件都是可以正常显示或者隐藏的,怎么会失败?

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

没看到代码,我只是猜测一下,因为你总是返回-1,可能就是控件未定义。。。

afan 发表于 2022-2-11 13:20:22

你确定GUICtrlGetState获取不到?

smooth 发表于 2022-2-11 16:51:55

afan 发表于 2022-2-11 13:20
你确定GUICtrlGetState获取不到?
我确定,你看一下截图。

afan 发表于 2022-2-11 17:52:15

代码不要用贴图

afan 发表于 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))

smooth 发表于 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

afan 发表于 2022-2-11 21:41:47

函数内Local了,GUICtrlCreateAvi赋值的却是Global,而取值的是Local。去掉Global即可。
你若用最简代码测试就不会这么武断的发问了。而且自己每次都很肯定,要知道,很多时候别人并不愿过多解释。

smooth 发表于 2022-2-11 21:48:39

afan 发表于 2022-2-11 21:41
函数内Local了,GUICtrlCreateAvi赋值的却是Global,而取值的是Local。去掉Global即可。
你若用最简代码测 ...

不是很理解,我得研究一下,谢谢A大。

haijie1223 发表于 2022-2-11 21:57:48

afan 发表于 2022-2-11 21:41
函数内Local了,GUICtrlCreateAvi赋值的却是Global,而取值的是Local。去掉Global即可。
你若用最简代码测 ...

楼主在研究global与local的作用范围,用事实证明函数内local是主人。

afan 发表于 2022-2-11 22:21:56

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

时常提醒函数内不要使用全局变量,除非你知道自己在干撒子。LZ不够重视啊~

itzyx 发表于 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。希望可以帮到你更好的理解。:face (33):

afan 发表于 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] 2
查看完整版本: [已解决]请教GUICtrlCreateAvi控件如何获取它的状态?