发表回复 
能不能用GUI实现根据输入及时更新下拉列表的效果
2010-03-12, 17 : 50
能不能用GUI实现根据输入及时更新下拉列表的效果
我们在google搜索时,当你键入几个字时,下面会自动列出以这几个字开头的内容,继续输入,下面的列表也会动态更新,很方便选择。不知道ahk能不能实现这个效果?

我个人感觉应该用combobox来实现,但又弄不出来。哪位高人写个代码?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 18 : 19
 
用guicontrol....

guicontrol 可以实时改变控件内容。。

尽量自己多看看帮助。帮助写得很详细了

  • AHK basic群:58806956
  • AHK advance群:3222783
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 18 : 33
 
guicontrol我是知道的,能够改变控件内容,但

1. 怎样做到实时,就是说我每输入一个字符,列表都能更新。VB中combobox有onchange事件,但怎样在ahk中实现?

2. 怎样让combobox的下拉菜单处于拉下的状态,而不需要我每次都手动去点那个三角
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 18 : 40
 
settimer
用一个定时器 不停地检测输入框内容 再用个定时器 来实时作出改变
让它处于下拉状态 这个 没做过。 guicontrol 应该也能实现的

  • AHK basic群:58806956
  • AHK advance群:3222783
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 18 : 52
 
SETTIMER 好主意,不一定实时,但至少能实现功能,一会儿试试看0.5秒刷新占用CPU会不会太高。

拉下状态我也正在试,controlclick不能直接点到combo的那个下拉按钮,我看看用坐标行不行。dracula004兄也帮忙试验一下吧?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 19 : 00
 
settimer 一般不会的。。 我曾经同时设置了 4个 定时器 。。。 为了以最快速度循环。。 时间设置的 1
也并无大碍。。 CPU没什么感觉。。
我试试看能不能 准确的定位那个下拉按钮。。

  • AHK basic群:58806956
  • AHK advance群:3222783
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 19 : 20
 
DropDownList 倒是可以。。
但是 controlclick 貌似点不了 combobox 的那个下拉箭头
我试试 直接的 click 看看

  • AHK basic群:58806956
  • AHK advance群:3222783
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 21 : 33
 
用edit啊,其他控件可以监听KeyDown事件
onMessage(0x100,"WM_KEYDOWN")
WM_KEYDOWN()
{
if (A_GuiControl=...)
{
}
}
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-12, 22 : 50
 
health901提出的g-lable很有效,能实时响应combobox的输入,进入子程序。可子程序中用guicontrol修改的combobox,却没有在窗口中实时更新,怎么刷新呢?

另外,打开下拉列表的问题还没有解决,有没有哪位高人提点建议?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-13, 08 : 52
 
下拉可以用ListBox
Gui无框透明即可

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-13, 21 : 48
 
引用:下拉可以用ListBox
Gui无框透明即可
health901 发表于 2010-3-13 08:52 [Image: back.gif]

这样不太方便,一方面listbox的高度不能实时随内容调整(当然可以写代码,但很麻烦),另外比起combobox还有诸多不便:比如用户输入一个字符串,下面列出匹​配的内容,如果用combobox,用户可以直接按“下”方向键选择,但listbox就不行了。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-13, 21 : 53
 
ahk 在GUI方面真的有点弱

★作品页★
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-13, 21 : 54
 
[i=s] 本帖最后由 ziustc 于 2010-3-13 22:03 编辑 [/i]

还有就是弱弱的问一句,在用guicontrol更改了控件的属性,怎么让更改生效呢?
如下代码,虽然每次输入都会触发执行_Select子程序,但combobox的内容并没更新。
gui, add, combox, g_Select, a|b|c
gui, show
return

_Select:
msgbox inputchanged.
guicontrol, , _Select, |c|d|e
return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-13, 22 : 57
 
给_Select一个v标签

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-14, 00 : 57
 
[i=s] 本帖最后由 ziustc 于 2010-3-14 00:58 编辑 [/i]

必须用v标签吗?我用g标签才能触发输入事件啊。

刚才调试了一下,用combobox1代替_Sel可行,代码如下:
#q::
gui, add, ComboBox, g_Sel, a|b
gui, show
return
_Sel:
guicontrol,, Combobox1, |c|d
return
就是说用控件类型+序号来指引某个控件是可行的,但却不能如help中所说的用label来指引,奇怪。

另一个问题,展开combobox的下拉列表,我找到两种方法:

1. ControlSend, Combobox1, {F4}, List.ahk ;输入combobox时按F4可拉下下拉列表。
2. Control, ShowDropDown, , ComboBox1, List.ahk ;用Control控制combobox拉下下拉列表。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-14, 09 : 19
 
g lable是触发用的
v lable是给控件标名字
要对控件进行操作 就要给个v标签撒

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-14, 22 : 27
 
引用:g lable是触发用的
v lable是给控件标名字
要对控件进行操作 就要给个v标签撒
health901 发表于 2010-3-14 09:19 [Image: back.gif]

好像不能同时给控件g标签和v标签,如下代码:

Gui, Add, ComboBox, g_Sel v_CombValue, a|b

在g_Sel触发的子程序中,%A_GuiControl%变量得到的是“v_CombValue"字符串,而不是真实的值。但是如果不加v标签,却又不能在Gui Submit之后读取combobox的值,实在难整啊。


现在还有一个问题,g标签是对control的输入作出相应,进入子程序,但能不能得到用户的具体输入?就是说用户按了什么键触发的g标签子程序?

我查了A_GuiEvent和A_EventInfo里都没有这个信息。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-03-15, 08 : 41
 
Create the ListView and its columns:
Gui, Add, ListView, xm r20 w700 vMyListView gMyListView, Name|In Folder|Size (KB)|Type
LV_ModifyCol(3, "Integer") ; For sorting, indicate that the Size column is an integer.

帮助文档中的ListView例子

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-02-29, 21 : 14
 
哇 老帖子 我正好在写的脚本里用到了ComboBox,可以这么写来实现你需要的“处于下拉状态”的功能
gui, add, combobox, 0x1 g_somelabel, a|b||cc|d

0x1是什么意思呢,帮助里有说的——CBS_SIMPLE 0x1 +/-Simple (仅 ComboBox). 总是显示列表框. 在编辑控件中显示列表框中的当前选择对象.

具体见于《用于 Gui 和 GuiControl 命令的可用样式》
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合