在AHK GUI中如何监听Progress控件的点击事件?
解决AutoHotkey Progress控件无法绑定点击事件的问题
Progress控件本身不支持通过g标签绑定点击回调子程序,这就是你遇到报错的原因。下面提供两种可行的解决方案:
方案一:用透明Button控件覆盖Progress
在每个Progress控件上方添加一个透明无样式的Button,让Button接收点击事件,同时不遮挡Progress的颜色显示。
示例代码:
Gui Main:New,+AlwaysOnTop +ToolWindow -Caption +HwndMainHwnd, Swatches Gui Main:Font,s14,Consolas ; 添加颜色样本Progress Gui Main:Add,Progress, ConSwatch1 cblue x04 y04 w35 h35, 100 Gui Main:Add,Progress, ConSwatch2 cred x04 y+4 w35 h35, 100 Gui Main:Add,Progress, ConSwatch3 cgreen x04 y+4 w35 h35, 100 ; 添加透明Button覆盖每个Progress,绑定点击子程序 Gui Main:Add,Button, x04 y04 w35 h35 +E0x80000 gDoBlue ; +E0x80000 让按钮透明无外观 Gui Main:Add,Button, x04 y+4 w35 h35 +E0x80000 gDoRed Gui Main:Add,Button, x04 y+4 w35 h35 +E0x80000 gDoGreen Gui Main:Show, x300 y300 w84 h356 NA return ; 点击子程序 DoBlue: MsgBox, 应用蓝色... return DoRed: MsgBox, 应用红色... return DoGreen: MsgBox, 应用绿色... return
方案二:监听GUI整体点击事件,通过坐标判断点击目标
给整个GUI绑定点击回调,通过点击的坐标计算对应哪个Progress控件,适合颜色样本较多的场景。
示例代码:
Gui Main:New,+AlwaysOnTop +ToolWindow -Caption +HwndMainHwnd gOnGuiClick, Swatches Gui Main:Font,s14,Consolas ; 记录每个样本的位置和对应颜色 Swatches := [ {x:4, y:4, w:35, h:35, color:"blue", name:"蓝色"}, {x:4, y:43, w:35, h:35, color:"red", name:"红色"}, {x:4, y:82, w:35, h:35, color:"green", name:"绿色"} ] ; 添加所有Progress控件 for _, swatch in Swatches { Gui Main:Add,Progress, c%swatch.color% x%swatch.x% y%swatch.y% w%swatch.w% h%swatch.h%, 100 } Gui Main:Show, x300 y300 w84 h356 NA return ; GUI点击事件处理 OnGuiClick: MouseGetPos, mouseX, mouseY,,, 2 ; 获取相对于GUI客户区的坐标 for _, swatch in Swatches { ; 判断点击坐标是否在当前样本范围内 if (mouseX >= swatch.x && mouseX <= swatch.x+swatch.w && mouseY >= swatch.y && mouseY <= swatch.y+swatch.h) { MsgBox, 应用%swatch.name%... break } } return
两种方案都能实现点击颜色样本触发对应操作的需求,方案一简单直观,方案二更适合动态生成大量样本的场景。
内容的提问来源于stack exchange,提问作者GaryAtlan82
相关产品推荐
相关产品推荐

