qazwsxedc 发表于 2012-10-29 14:28:54

如何获得控件是否可修改的状态

利用ControlCommand中"IsVisible"和"IsEnabled"可获得控件可见和控件可用的状态,当控件可见且可用,但值不能被修改时,如何获得状态?

Neuis 发表于 2012-10-29 16:32:00


while 1
      if ControlCommand ( "窗口标题", "窗口文本", 控件ID, "IsEnabled" )= 1and ControlCommand ( "窗口标题", "窗口文本", 控件ID, "IsVisible" )= 1 then
      msgbox(0,"","OK")
      exitloop
      endif
wend楼主你是想要这效果?

xiehuahere 发表于 2012-10-29 17:32:00

楼主说的不是状态,而是风格 - 只读属性。

netegg 发表于 2012-10-29 18:08:21

本帖最后由 netegg 于 2012-10-29 18:10 编辑

楼主,控件可用却不能改那怎么叫可用?除非挂着钩子或者其他的操作,那不是属性或者样式的事

afan 发表于 2012-10-29 20:07:29

api 获取控件的样式及扩展样式

xiehuahere 发表于 2012-10-30 10:34:34

回复 5# afan

API怎么搞?
下面这样不行,A大帮看看。
#include <GUIComboBox.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>

Global Const $GWL_STYLE = -16
Global $isReadOnly = 1

$Form = GUICreate("test", 200, 150)
$hEdit = GUICtrlCreateEdit("赐予我力量吧!", 20, 40, 160, 30, BitOR($ES_READONLY, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
$Button1 = GUICtrlCreateButton("改变只读状态", 10, 90, 85, 40)
$Button2 = GUICtrlCreateButton("获取只读状态", 110, 90, 85, 40)
GUISetState()
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case $GUI_EVENT_CLOSE
                        ExitLoop
                Case $Button1
                        $isReadOnly = BitXOR($isReadOnly, 1)
                        _GUICtrlEdit_SetReadOnly($hEdit, $isReadOnly)
                Case $Button2
                        Local $result = DllCall("User32.dll", "dword", "GetWindowLong", "hwnd", $Form, "int", $GWL_STYLE)
                        If BitAND($result, $ES_READONLY) = $ES_READONLY Then
                                MsgBox(0, "Edit控件样式", "只读")
                        Else
                                MsgBox(0, "Edit控件样式", "可写")
                        EndIf
        EndSwitch
WEnd

afan 发表于 2012-10-30 10:44:55

回复 6# xiehuahere


    "hwnd" 参数应该是 Edit 控件的句柄,非窗口句柄

xiehuahere 发表于 2012-10-30 10:46:00

回复 7# afan


试过也不行的。不信你试试^_^

afan 发表于 2012-10-30 10:48:10

回复afan


试过也不行的。不信你试试^_^
xiehuahere 发表于 2012-10-30 10:46 http://www.autoitx.com/images/common/back.gif


    可以的,23行改一下Local $result = DllCall("User32.dll", "dword", "GetWindowLong", "hwnd", GUICtrlGetHandle($hEdit), "int", $GWL_STYLE)

netegg 发表于 2012-10-30 10:50:57

本帖最后由 netegg 于 2012-10-30 10:53 编辑

回复 5# afan
afan,你看明白lz的意思了?我琢磨了n长时间也没搞明白lz到底要干什么
按理说不是很麻烦,记得我曾经写过一个combo,是编辑框可见可用但不能输入的,但那个简单用样式解决不了

afan 发表于 2012-10-30 10:53:57

回复afan
可见可用不能改实在想不明白 ...
netegg 发表于 2012-10-30 10:50 http://www.autoitx.com/images/common/back.gif


    只读就可以是“可见可用不能改”啊,可以“复制”操作不就是可用吗……

netegg 发表于 2012-10-30 11:00:07

回复 11# afan
所以我才没搞懂,lz说的这个可用和不能改到底是什么意思,只读相当于是禁用了,尤其是编辑框,如果只读了,光标好像就没有了,印象不深了

afan 发表于 2012-10-30 11:02:40

回复 12# netegg


    编辑框 只读 时是可用的,可以“全选、复制”操作,只是不能修改而已。

netegg 发表于 2012-10-30 11:07:24

回复 13# afan
哦,这么说也对

xiehuahere 发表于 2012-10-30 11:23:15

回复 9# afan


啊~~晕倒!!果然可以了。

一般来说,GUICtrlCreateEdit得到的是控件ID,但能否解释一下为什么_GUICtrlEdit_SetReadOnly的第一个参数也是要求句柄,但直接传控件ID也可以呢(帮助的例子里也是这样)??我是被帮助坑了啊~~
页: [1] 2
查看完整版本: 如何获得控件是否可修改的状态