GUI 控制类型是可使用 Gui.Add 添加到 GUI 窗口中的交互元素.
允许 ActiveX 组件(例如 MSIE 浏览器控件) 嵌入到 GUI 窗口.
语法:
GuiCtrl := MyGui.Add("ActiveX", Options, ComponentName) GuiCtrl := MyGui.AddActiveX(Options, ComponentName)
示例:
WB := MyGui.Add("ActiveX", "w980 h640", "Shell.Explorer")
当控件创建完成后, 可以通过 GuiControl.Value 来获取该 ActiveX 对象.
要处理由 ActiveX 对象公开的事件, 请使用 ComObjConnect.
要判断 ActiveX 对象的类型, 请使用 ComObjType.
Gui 示例 #10 演示了一个通过 WebBrowser 控件创建的简单网络浏览器.
一个按钮, 按下它即可触发相应动作.
语法:
GuiCtrl := MyGui.Add("Button", Options, Name) GuiCtrl := MyGui.AddButton(Options, Name)
示例:
MyBtn := MyGui.Add("Button", "Default w80", "OK")
MyBtn.OnEvent("Click", MyBtn_Click) ; 当点击时调用 MyBtn_Click.
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的:
Default: 使按钮成为默认按钮. 当用户按下 Enter 时, 默认按钮的 Click 事件会自动触发, 除非此时键盘焦点在另一个按钮或含有 WantReturn 样式的多行编辑控件上.
(不常见的数字样式): 有关列表, 请参阅 Button 样式列表.
类型: 字符串
按钮的显示名称, 其中可以包含换行符(`n) 来开始新行.
可以使用一个和符号(&) 让某个字母带下划线,
例如 "&Pause" 中的字母 P. 这允许用户按下 Alt+P 作为其快捷键. 要显示一个原义的和符号, 请指定两个连续的和符号(&&).
每当用户点击该按钮, 或者在按钮获得焦点时按下 Space 或 Enter 时, 就会触发 Click 事件.
DoubleClick, Focus 和 LoseFocus 事件也是支持的. 由于这些事件只有在控件具有 BS_NOTIFY(0x4000) 样式时才会触发, 因此它会由 GuiControl.OnEvent 自动添加.
使用 GuiControl.Opt 来更改默认按钮. 例如, OtherBtn.Opt("+Default") 会将默认按钮更改为另一个按钮, 而 MyBtn.Opt("-Default") 则会使窗口不再具有默认按钮.
已知限制: 某些桌面主题可能无法正确显示按钮的文字. 如果出现这种情况, 请尝试在 Options 中添加 -Wrap(负 Wrap). 但是, 这也会阻止多行文本.
一个小方框, 可以选中或取消选中来表示 On/Off, Yes/No, 等等.
语法:
GuiCtrl := MyGui.Add("CheckBox", Options, Caption) GuiCtrl := MyGui.AddCheckBox(Options, Caption)
示例:
MyCB := MyGui.Add("CheckBox",, "Ship to billing address?")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
Check3: 启用第三种状态, 这表示复选框既不处于选中状态也不处于未选中状态.
Checked: 复选框初始状态带有一个勾号. 单词 Checked 后面可以紧跟着数字 0, 1 或 -1(或者单词 Gray) 来表示初始状态(未选中, 已选中或不确定). 换句话说, "Checked" 和 "Checked" VarContainingOne 是相同的.
(不常见的数字样式): 有关列表, 请参阅 CheckBox 样式列表
类型: 字符串
显示在框右侧的标注. 这通常用作提示或描述, 它可以包含换行符(`n) 来开始新行.
可以使用一个和符号(&) 让某个字母带下划线, 例如 "&Pause". 中的字母 P, 这允许用户按下 Alt+P 作为其快捷键. 要显示一个原义的和符号, 请指定两个连续的和符号(&&).
GuiControl.Value 返回数字 1 表示选中, 0 表示未选中, 而 -1 表示不确定. Gui.Submit 会存储相同的值.
每当复选框被点击时, 它就会自动在它的两个或三个可能的状态之间循环, 然后触发 Click 事件, 允许脚本立即响应用户的输入.
DoubleClick, Focus 和 LoseFocus 事件也是支持的. 由于这些事件只有在控件具有 BS_NOTIFY(0x4000) 样式时才会触发, 因此它会由 GuiControl.OnEvent 自动添加. 这种样式默认情况下不会被启用, 因为启用它会妨碍快速点击操作来改变复选标记的状态(例如, 如果用户连续点击两次从未选中切换为选中, 然后再变为不确定状态).
如果在 Options 中指定了宽度(W) 而没有指定行数(R) 或高度(H), 那么在需要时控件的文本将自动换行, 同时自动设置控件的高度.
已知限制: 某些桌面主题可能无法正确的显示 Checkbox 的文本. 如果遇到此情况, 请尝试在 Options 中包含 -Wrap(负 Wrap). 不过这样也阻止多行文本.
当按下一个小按钮时会显示一个选项列表, 同时还允许输入自由格式的文本作为列表中可选的项目.
语法:
GuiCtrl := MyGui.Add("ComboBox", Options, Choices) GuiCtrl := MyGui.AddComboBox(Options, Choices)
示例:
MyCB := MyGui.Add("ComboBox",, ["Red", "Green", "Blue", "Black", "White"])
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
ChooseN: 指定 N 为要预先选中的项目的编号. 例如, Choose5 会预选第五项(和其他选项一样, 它也可以为变量, 例如 "Choose" Var). 要在控件创建后改变选择, 请使用 GuiControl.Choose.
Uppercase 或 Lowercase: 将列表中的所有项目转换为大写字母或小写字母.
Sort: 按字母顺序排列列表的内容, 这也会影响后面通过 GuiControl.Add 添加的所有项目. Sort 选项还会启用在弹出下拉列表时的增量搜索; 这使得可以通过输入一个项目名称的前几个字符来选择此项.
Limit: 将用户的输入限制在 ComboBox 编辑区域的可见宽度内.
Simple: 让 ComboBox 表现的像一个下方带有 ListBox 的 Edit 区域.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则默认值为当前字体大小的 15 倍.
Rn 或 Hn: 设置弹出列表的高度. 例如, 指定 r7 将使列表的高度为 7 行, 而 h400 将把选择字段和列表的总高度设置为 400 像素. 如果同时省略 R 和 H, 则列表将自动扩展以利用用户桌面的可用高度.
(不常见的数字样式): 有关列表, 请参阅 ComboBox 样式列表
类型: Array
一个选项的数组, 如 ["Red", "Green", "Blue"]. 在控件创建完成后, 若要添加或删除选项, 请使用 GuiControl.Add 或 GuiControl.Delete.
GuiControl.Value 方法返回当前选中项的索引(第一个项目为 1, 第二个为 2, 依此类推), 如果控件中的文本与列表项不匹配, 则返回 0, 而 GuiControl.Text 方法则返回组合框编辑字段的内容. Gui.Submit 会存储文本, 除非该控件具有 AltSubmit 选项且文本与列表项匹配, 在这种情况下, 它存储项目的索引.
每当用户选择新的项目或更改控件的文本时, 就会触发 Change 事件. 同时也支持 Focus 和 LoseFocus 事件.
要设置选区字段或列表项的高度, 请使用 CB_SETITEMHEIGHT 消息, 如下例所示:
MyGui := Gui()
MyCB := MyGui.Add("ComboBox", "w200 Choose1", ["One", "Two"])
; CB_SETITEMHEIGHT = 0x0153
SendMessage(0x0153, -1, 50, MyCB) ; 设置选区字段的高度.
SendMessage(0x0153, 0, 50, MyCB) ; 设置列表项的高度.
MyGui.Show("h70")
另外, 如果您想将后续显示和隐藏弹出列表的过程自动化, 请使用 ControlShowDropDown 和 ControlHideDropDown.
允许将 AutoHotkey 本身不直接支持的控件嵌入到 GUI(图形用户界面) 窗口中.
语法:
GuiCtrl := MyGui.Add("Custom", Options, Text) GuiCtrl := MyGui.AddCustom(Options, Text)
示例:
MyCBEx := MyGui.Add("Custom", "ClassComboBoxEx32")
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
ClassName: 指定 Name 为所需控件的 Win32 类名. 例如, ClassComboBoxEx32 将添加 ComboBoxEx 控件, 或 ClassScintilla 将添加 Scintilla 控件(注意必须加载 SciLexer.dll 库后才能添加此控件).
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果省略, 则默认值为当前字体大小的 30 倍..
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将在控件里预留 7 行空间, 而 h400 则将控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则默认值为 5 行.
类型: 字符串
任意文本. 其是否会被忽略则取决于自定义控件的性质.
AutoHotkey 通过 Gui.Add 或 GuiControl.Value 使用标准的 Windows 控件文本处理函数来获取或替换控件中的文本.
由于每个通知代码的含义取决于发出该通知的控件, 因此对于自定义控件, GuiControl.OnEvent 不被支持. 然而, 如果控件以 WM_NOTIFY 或 WM_COMMAND 消息的形式发送通知, 那么脚本可以使用 GuiControl.OnNotify 或 GuiControl.OnCommand 来检测这些通知.
Gui 示例 #11 演示了如何添加和使用 IP 地址控件.
一个看起来像单行编辑控件的框, 不过它接受日期和/或时间. 同时提供下拉日历.
语法:
GuiCtrl := MyGui.Add("DateTime", Options, Format) GuiCtrl := MyGui.AddDateTime(Options, Format)
示例:
MyDT := MyGui.Add("DateTime",, "LongDate")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
ChooseTimestamp: 要预选今天外的其他日期, 请以 YYYYMMDD 的格式指定 Timestamp. 例如, Choose20050531 将预选 2005 年 5 月 31 日(和其他选项一样, 它还可以为变量, 如 "Choose" Var). 日期的时间部分是可选的(有关详情, 请参阅下面的备注). 指定 Timestamp 为单词 None, 这样就不会选择任何日期/时间. ChooseNone 会在控件中创建一个复选框, 只要控件中不含日期则此复选框为未选中状态. 当控件中没有选择日期时, GuiControl.Value 将返回空白值(空字符串). 要在控件创建后改变选择, 请使用 GuiControl.Value.
RangeMinMax: 限制了所选日期可向前或向后的时间范围. 指定 MinMax 为以 YYYYMMDD 格式表示的最小和最大的日期(它们之间使用破折号连接). 例如, Range20050101-20050615 将范围限定在 2005 年的前 5.5 个月之内. 最小或最大的日期可以省略, 此时控件中在这个方向上的日期不受限制. 例如, Range20010101 将禁止选择早于 2001 年的日期, 而 Range-20091231(有前导的破折号) 将禁止选择 2009 年以后的日期. 如果不含 Range 选项, 则可以选择介于 1601 和 9999 年份之间的任何日期. 无法限制日期的时间部分.
Right: 让下拉日历在控件的右边而不是左边拉下.
1: 在此控件的右边提供一个增减控件来修改日期和时间的值, 这会取代其他地方可用的下拉月历的修改按钮. 这不能和上面所述的 LongDate 格式选项联用.
2: 在控件中提供复选框, 用户可以取消此复选框选择来表示没有选择日期/时间. 控件创建后无法改变此选项.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则默认值为当前字体大小的 30 倍.
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将在控件内预留 7 行空间, 而 h400 将把控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则默认为 1 行.
(不常见的数字样式): 有关列表, 请参阅 DateTime 样式列表
类型: 字符串
如果空白或省略, 则默认使用 ShortDate. 否则, 指定以下其中一种格式作为初始显示格式. 若要在控件创建后更改其格式, 请使用其 SetFormat 方法.
ShortDate: 采用区域设置的短日期格式. 例如, 在某些区域设置中, 它看起来像这样: 6/1/2005
LongDate: 使用区域设置的长日期格式. 例如, 在某些区域设置中, 它看起来像这样: Wednesday, June 01, 2005
Time: 仅显示时间, 使用区域设置的时间格式. 尽管不显示日期, 但它仍然存在于控件中并且以 YYYYMMDDHH24MISS 的格式一起被获取. 例如, 在某些区域设置中, 它看起来像这样: 9:37:45 PM
(自定义格式): 指定日期和时间格式的任意组合. 例如, "M/d/yy HH:mm" would look like 6/1/05 21:37. 类似的, "dddd MMMM d, yyyy hh:mm:ss tt" 看起来像 Wednesday June 1, 2005 09:37:45 PM. 想要原义显示的字母和数字应该括在一对单引号中, 如此例所示: "'Date:' MM/dd/yy 'Time:' hh:mm:ss tt". 与之相比, 非字母数字字符, 如空格, 制表符, 斜杠, 冒号, 逗号和其他标点不需要包围在单引号中. 例外情况是单引号字符本身: 要产生原义的单引号, 请使用四个连续的单引号(''''), 或者如果该引号已经处于外层的引号之中, 那么就只需使用两个引号即可.
除了图形用户界面控件的默认方法/属性之外, 该控件类型还具有以下方法:
设置 DateTime 控件的显示格式.
GuiCtrl.SetFormat(Format)
Format 是一个格式字符串, 如上文所述. 此方法允许在创建 DateTime 控件之后, 更改其显示格式.
在 Choose 选项中, 可以选择是否显示具体的时间. 但是, 当进入或离开控件时, 时间部分必须总是在日期之前. 时间部分的格式为 HH24MISS(小时数, 分钟数, 秒数), 其中 HH24 含义是用 24 小时格式表示; 例如, 09 为 9am, 而 21 为 9pm. 因此, 完整的日期时间字符串的格式应为 YYYYMMDDHH24MISS.
当指定了 YYYYMMDDHH24MISS 格式的日期时, 只有前导部分是不能缺少的. 其他任何省略的元素将使用下列默认值代替: MM: 月份 01, DD: 日期 01, HH24: 小时 00, MI: 分钟 00, SS: 秒 00.
在下拉日历中, 可以点击底部的今日字符串来选择今天的日期. 此外, 还可以点击年份和月份名称来方便地导航到新的月份或年份.
GuiControl.Value 以 YYYYMMDDHH24MISS 的格式返回所选的日期和时间. 无论日期和时间是否在控件中实际可见, 它们都是存在值中的. Gui.Submit 也会存储相同的值.
每当用户更改日期或时间时, 就会触发 Change 事件. 同时也支持 Focus 和 LoseFocus 事件.
若要更改下拉式日历中任何部分的颜色, 使用 SendMessage 如下例所示:
DTM_SETMCCOLOR := 0x1006
MCSC_BACKGROUND := 0 ; 总体背景
MCSC_MONTHBK := 4 ; 月历的背景
MCSC_TEXT := 1 ; 月历的文本
MCSC_TITLEBK := 2 ; 标题的背景
MCSC_TITLETEXT := 3 ; 标题的文本
MCSC_TRAILINGTEXT := 5 ; 其他月日期的文本
BackColor := 0xFFAA99 ; 该日历的新背景颜色(BGR, 而非 RGB).
TextColor := 0x0066CC ; 该日历的新文本颜色(BGR, 而非 RGB).
MyGui := Gui()
MyDT := MyGui.Add("DateTime")
MyDT.OnNotify(-754, DTN_DROPDOWN) ; 强制采用经典主题外观.
SendMessage(DTM_SETMCCOLOR, MCSC_MONTHBK, BackColor, MyDT)
SendMessage(DTM_SETMCCOLOR, MCSC_TEXT, TextColor, MyDT)
MyGui.Show()
DTN_DROPDOWN(MyDT, lParam) {
hCal := SendMessage(0x1008, 0, 0, MyDT) ; 0x1008 is DTM_GETMONTHCAL.
DllCall("UxTheme\SetWindowTheme", "Ptr", hCal, "WStr", "", "WStr", "")
}
当按下一个小按钮时显示的选择列表.
语法:
GuiCtrl := MyGui.Add("DropDownList", Options, Choices) GuiCtrl := MyGui.AddDropDownList(Options, Choices)
示例:
MyDDL := MyGui.Add("DropDownList",, ["Black", "White", "Red", "Green", "Blue"])
外观:
控件的类型名称可以是 DropDownList 或 DDL.
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
ChooseN: 指定 N 为要预先选中的项目的编号. 例如, Choose5 会预选第五项(和其他选项一样, 它也可以为变量, 如 "Choose" Var). 要在控件创建后改变选择, 请使用 GuiControl.Choose.
Uppercase 或 Lowercase: 将列表中的所有项目转换为大写字母或小写字母.
Sort: 按字母顺序排列列表的内容(这也会影响后面通过 GuiControl.Add 添加的所有项目). 选项还会启用在弹出下拉列表时的增量搜索; 这使得可以通过输入一个项目名称的前几个字符来选择此项.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则默认值为当前字体大小的 15 倍.
Rn 或 Hn: 设置弹出列表的高度. 例如, 指定 r7 将使列表的高度为 7 行, 而 h400 将把选择字段和列表的总高度设置为 400 像素. 如果同时省略 R 和 H, 则列表将自动扩展以利用用户桌面的可用高度.
(不常见的数字样式): 有关列表, 请参阅 DropDownList 样式列表
类型: Array
一个选项的数组, 如 ["Red", "Green", "Blue"]. 在控件创建完成后, 若要添加或删除选项, 请使用 GuiControl.Add 或 GuiControl.Delete.
GuiControl.Value 返回当前选中的项目的索引(第一个项目是 1, 第二个项目是 2, 等等), 如果没有选中项目, 则返回值为 0, 而 GuiControl.Text 返回当前选中项目的文本. Gui.Submit 存储文本, 但如果控件具有 AltSubmit 选项, 此时它会存储项的索引.
每当用户选择一个新的项目时, 就会触发 Change 事件. 同时也支持 Focus 和 LoseFocus 事件.
要设置选区字段或列表项的高度, 请使用 CB_SETITEMHEIGHT 消息, 如下例所示:
MyGui := Gui()
MyDDL := MyGui.Add("DDL", "w200 Choose1", ["One", "Two"])
; CB_SETITEMHEIGHT = 0x0153
SendMessage(0x0153, -1, 50, MyDDL) ; 设置选区字段的高度.
SendMessage(0x0153, 0, 50, MyDDL) ; 设置列表项的高度.
MyGui.Show("h70")
另外, 如果您想将后续显示和隐藏弹出列表的过程自动化, 请使用 ControlShowDropDown 和 ControlHideDropDown.
一个用户可以自由输入文本的区域.
语法:
GuiCtrl := MyGui.Add("Edit", Options, Text) GuiCtrl := MyGui.AddEdit(Options, Text)
示例:
MyEdit := MyGui.Add("Edit", "r9 w135", "Text to appear inside the edit control (omit this parameter to start off empty).")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
LimitN: 限制用户的输入. 如果 N 被省略, 限制输入在编辑区域的可见宽度内. 否则, 指定 N 为要限制输入指定数目的字符. 例如, Limit10 将允许输入不超过 10 个字符.
Uppercase 或 Lowercase: 把用户输入的字符自动转换成大写或小写.
Multi: 让控件可以含有多行文本. 然而, 通常没必要指定此选项, 因为如果 Text 包含多行文本, 其高度大于默认的行高, 或者其行数已显式指定大于 1, 则该控件会自动被识别为多行控件. 例如, 在 Options 中指定 r3 将创建一个具有以下默认属性的 3 行编辑控件: 一个垂直滚动条, 启用自动换行并且捕获 Enter 作为输入的一部分而不触发窗口的默认按钮.
Number: 阻止用户输入数字以外的其他字符到编辑区域(然而, 还是可能粘贴非数字字符到里面). 强制输入数字的另一种方法是添加 UpDown 控件到 Edit 控件.
Password: 通过将用户的输入替代为屏蔽字符来隐藏用户的输入(例如密码). 如果想使用非默认的屏蔽字符, 请在单词 Password 后加上此符号. 例如, Password* 将使用星号而不是黑色圆(项目符号) 作为屏蔽符号. 注意: 此选项对于多行编辑控件没有效果.
ReadOnly: 阻止用户改变控件的内容. 不过, 仍然可以滚动, 选择文本或将文本复制到剪贴板.
Tn: 在多行编辑控件中设置制表符位置(因为制表符位置决定了原义的制表符字符会跳转到的列位置, 所以它们可用于将文本格式化为多列). 如果没有使用 T 选项, 则每 32 个对话框单位设置一次制表位(每个对话框单位的宽度由操作系统决定). 如果仅使用过一次 T 选项, 则每 n 个单位设置一次横跨整个控件宽度的制表位. 例如, t64 将设置制表位之间的距离为默认的两倍. 要自定义制表位, 请指定 T 选项多次, 例如 t8 t16 t32 t64 t128. 在列表中每个绝对的列位置将设置一个制表位, 制表位数目最大可达 50 个.
WantCtrlA: 指定 -WantCtrlA(负 WantCtrlA) 阻止用户按下 Ctrl+A 来选择编辑控件中所有文本.
WantReturn: 指定 -WantReturn(负 WantReturn) 来阻止多行 编辑控件捕获 Enter. 按下 Enter 相当于点击了窗口的默认按钮(如果有). In this case, 用户可以按下 Ctrl+Enter 来开始新行.
WantTab: 使得 Tab 产生制表符而不是导航到下一个控件. 如果没有这个选项, 则在多行编辑控件中用户可以按下 Ctrl+Tab 来产生制表符. 注意, WantTab 也可以用于单行编辑控件.
Wrap: 指定 -Wrap(负 Wrap) 来关闭多行编辑控件中的自动换行属性. 由于在控件创建后不能改变此样式, 所以需要使用下列方法的其中一个来改变它: 1) Destroy 后重新创建窗口和其中的控件; 或 2) 创建两个重叠的编辑控件, 其中一个启用自动换行而另一个禁用. 当前没有使用的那个可以保持空的和/或隐藏.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果省略, 空编辑控件默认为当前字体大小的 15 倍. 非空编辑控件默认为最长行的宽度.
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将在控件内预留 7 行空间, 而 h400 则将控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则单行编辑控件默认为 1 行, 而空的多行编辑控件默认为 3 行. 非空的编辑控件默认会根据其包含的行数来设定高度.
(不常见的数字样式): 有关列表, 请参阅 Edit 样式列表
类型: 字符串
如果为空或省略, 控件初始为空. 否则, 指定控件内部显示的文本内容.
要开始新的一行, 可以使用单独的换行符(`n) 或者回车加换行符(`r`n). 这两种方法都会在编辑控件中产生原义的 `r`n 对. 然而, 当通过 GuiControl.Value 或 Gui.Submit 来检索控件的内容时, 文本中的每对 `r`n 总是被转换成单独的换行符(`n). 要绕过这个行尾转换, 请使用 GuiControl.Text. 此外, 通过延续片段可以将单个长行分成几个较短的行.
当用户或脚本改变控件的内容时, 触发 Change 事件.
如果控件启用了自动换行(对于多行编辑控件默认是启用的), 那么用户输入时任何自动换行的地方不会产生换行字符(仅 Enter 才会).
要加载一个文本文件的内容到编辑控件中, 请使用 FileRead 和 GuiControl.Value:
MyEdit := MyGui.Add("Edit", "r20")
MyEdit.Value := FileRead("C:\My File.txt")
一个矩形的框, 常用来封装一组相关的控件.
语法:
GuiCtrl := MyGui.Add("GroupBox", Options, Title) GuiCtrl := MyGui.AddGroupBox(Options, Title)
示例:
MyGB := MyGui.Add("GroupBox", "w200 h100", "Geographic Criteria")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
Wrap: 允许 Title 包含多行文字.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果省略, 则默认值为当前字体大小的 15 倍, 加上 2 倍的 X-边距.
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将在控件内预留 7 行空间, 而 h400 则将控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则默认值为 2 行.
(不常见的数字样式): 有关列表, 请参阅 GroupBox 样式列表
类型: 字符串
分组框的标题, 如果存在, 则显示在其左上角.
可以使用一个和符号(&) 让某个字母带下划线, 例如 "&Criteria" 中的字母 C. 这允许用户按下快捷键 Alt+C 来将键盘焦点设置到在 GroupBox 控件之后添加的第一个可输入的控件上. 要显示一个原义的和符号, 请指定两个连续的和符号(&&).
一个看起来像单行编辑控件的框, 但它接受用户按下的按键组合. 例如, 如果用户按下 Ctrl+Alt+C, 那么此框中将显示 "Ctrl + Alt + C".
语法:
GuiCtrl := MyGui.Add("Hotkey", Options, KeyName) GuiCtrl := MyGui.AddHotkey(Options, KeyName)
示例:
MyHotkey := MyGui.Add("Hotkey",, "^!c")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
LimitN: 指定 N 为以下一个或多个数字的总和, 以限制用户可输入的热键类型: 1 阻止不含修饰符的按键, 2 阻止修饰符仅含 Shift 的按键, 4 阻止修饰符仅含 Ctrl 的按键, 8 阻止修饰符仅含 Alt 的按键, 阻止修饰符含 Shift+Ctrl 的按键, 32 阻止修饰符含 Shift+Alt 的按键, 而 128 阻止修饰符含 Shift+Ctrl+Alt 的按键(64 不受支持; 它不会正确执行). 例如, Limit1 将阻止输入不含修饰符的热键, 如字母和数字的输入, 而 Limit15 则要求至少有两个修饰键. 如果用户输入了被禁止的修饰键组合, 则自动使用 Ctrl+Alt 组合代替.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则默认值为当前字体大小的 15 倍.
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将在控件内预留 7 行空间, 而 h400 将把控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则默认为 1 行.
类型: 字符串
如果为空或省略, 控件在初始时不含有热键. 否则, 请指定其修饰符和名称. 例如, ^!p 会显示 "Ctrl + Alt + P". 支持的修饰符仅包含 ^(Control), !(Alt) 和 +(Shift). 有关可用的按键名称, 请参阅按键列表.
有些按键即使被识别为不同的名称, 也显示为相同的名称. 例如, ^Numpad7 和 ^NumpadHome 都可能显示为 "Ctrl + Num 7".
GuiControl.Value 返回控件的热键修饰符和名称, 与 Hotkey 函数兼容. 例如: ^!c, +!Home, +^Down, ^Numpad1, !NumpadEnd. 如果控件中没有热键, 则该值为空白. Gui.Submit 储存相同的值.
每当用户改变控件的内容时(通过按键), 则触发 Change 事件. 注意, 即使存在不完整的热键, 事件也会被触发. 例如, 如果用户按住 Ctrl, 事件就会被触发一次, 并且 GuiControl.Value 只返回一个抑扬符(^). 当用户完成热键时, 事件再次被触发, 而 GuiControl.Value 返回完整的热键.
Hotkey 控件对热键的支持有限. 例如, 它不支持鼠标/控制器热键或 Win(LWin 和 RWin). 解决此问题的一种方法是提供一个或多个 checkbox 作为用户启用额外的修饰键的工具, 如 Win.
一种可以包含类似于网络浏览器中所见链接的文本控件.
语法:
GuiCtrl := MyGui.Add("Link", Options, String) GuiCtrl := MyGui.AddLink(Options, String)
示例:
MyLink1 := MyGui.Add("Link",, 'This is a <a href="https://www.autohotkey.com">link</a>')
MyLink2 := MyGui.Add("Link",, 'Links may be used anywhere in the text like <a id="A">this</a> or <a id="B">that</a>')
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
(不常见的数字样式): 有关列表, 请参阅 Link 样式列表
类型: 字符串
要显示的字符串. 将链接文本括在 <A> 和 </A> 标记内以创建可点击的链接, 还可以附加 ID 和/或 HREF 属性. 该字符串可以包含换行符(`n) 以开始新行. 此外, 可以通过延续片段将一个长行拆分成几个较短的行.
可以使用一个和符号(&) 让某个字母带下划线, 例如 "&First Name" 中的字母 F. 这允许用户按下快捷键 Alt+F 将键盘焦点设置到在 Link 控件之后添加的第一个可输入的控件上. 要显示一个原义的和符号, 请指定两个连续的和符号(&&).
尽管这看起来像 HTML, Link 控件仅支持<A>(可选地带有 ID 和/或 HREF 属性) 和 </A> 标签.
如果在 Options 中指定了宽度(W), 但未指定行数(R) 或高度(H), 则控件中的文本将根据需要进行换行, 并且控件的高度将自动设置.
每当用户点击一个链接, 就会触发 Click 事件. 如果控件没有 Click 回调(通过调用 GuiControl.OnEvent 注册), 链接的 HREF 会自动执行, 就像传递给 Run 函数一样.
有关演示, 请参阅 OnEvent 示例 #1.
一个相对较高的框, 其中含有一系列可供选择的选项.
语法:
GuiCtrl := MyGui.Add("ListBox", Options, Choices) GuiCtrl := MyGui.AddListBox(Options, Choices)
示例:
MyLB := MyGui.Add("ListBox", "r5", ["Red", "Green", "Blue", "Black", "White"])
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
ChooseN: 指定 N 为要预先选中的项目的编号. 例如, Choose5 会预选第五项(和其他选项一样, 它也可以为变量, 如 "Choose" Var). 要在控件创建后改变选择, 请使用 GuiControl.Choose. 如果控件带有 Multi 选项, 请使用 GuiControl.Choose 反复地预先选择多个项目.
Multi 或 0x8: 允许使用 shift-click 和 control-click 同时选择多个项目. 0x8 也支持这一功能, 但无需按住 shift/control. 如果此选项存在, GuiControl.Value, GuiControl.Text 和 Gui.Submit 返回/储存一个选定项目的数组. 有关详情, 请参阅下面的备注.
ReadOnly: 对选择的项目不进行高亮显示, 但 GuiControl.Value, GuiControl.Text 和 Gui.Submit 仍会返回/储存一个选择的项目.
Sort: 按字母顺序自动排列列表的内容, 这也会影响后面通过 GuiControl.Add 添加的所有项目. Sort 选项还会启用增量搜索; 这使得可以通过输入一个项目名称的前几个字符来选择此项.
Tn: 设置制表位, 它可以把文本格式成列. 如果没有使用 T 选项, 则每 32 个对话框单位设置一次制表位(每个对话框单位的宽度由操作系统决定). 如果仅使用一次 T 选项, 则每 n 个单位设置一次横跨整个控件宽度的制表位. 例如, t64 将设置制表位之间的距离为默认的两倍. 要自定义制表位, 请指定 T 选项多次, 例如 t8 t16 t32 t64 t128. 在列表中每个绝对的列位置会设置一个制表位, 制表位数目最大可达 50 个.
0x100: 应用 LBS_NOINTEGRALHEIGHT 样式. 这强制 ListBox 准确符合指定的高度而不是适应于避免在底部的行只显示一部分的高度. 此选项也避免了其字体改变时 ListBox 缩小的情况.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则默认值为当前字体大小的 15 倍.
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将在控件内预留 7 行空间, 而 h400 则将控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则默认值为 3 行.
(不常见的数字样式): 有关列表, 请参阅 ListBox 样式列表
类型: Array
一个选项的数组, 如 ["Red", "Green", "Blue"]. 在控件创建完成后, 若要添加或删除选项, 请使用 GuiControl.Add 或 GuiControl.Delete.
GuiControl.Value 返回当前选中的项目的索引(第一个项目是 1, 第二个项目是 2, 等等), 如果没有选中项目, 则返回值为 0, 而 GuiControl.Text 返回当前选中项目的文本. Gui.Submit 存储文本, 但如果控件具有 AltSubmit 选项, 此时它会存储项目的索引.
如果控件具有 Multi 选项, GuiControl.Value, GuiControl.Text 和 Gui.Submit 返回/储存一个选择项目的数组. 例如, [1, 2, 3] 就表示选择了前三个项目. 要从字符串中提取出单个项目, 请使用 MyLB.Text[1](1 是第一个项目) 或 For-loop 如下例所示:
For Index, Field in MyLB.Text
{
MsgBox "Selection number " Index " is " Field
}
每当用户选择或取消选择一个或多个项目时, 则触发 Change 事件. 同时也支持 DoubleClick, Focus 和 LoseFocus 事件.
当添加大量项目到 ListBox 时, 在操作前使用 MyLB.Opt("-Redraw"), 并且在操作后使用 MyLB.Opt("+Redraw"). 有关详情, 请参阅 Redraw.
ListView 是由操作系统提供的最精心设计的控件之一. 在其最容易识别的形式中, 它显示一个多行多列组成的表格视图, 最常见的例子是资源管理器的文件和文件夹列表(详细信息视图).
语法:
GuiCtrl := MyGui.Add("ListView", Options, ColumnTitles) GuiCtrl := MyGui.AddListView(Options, ColumnTitles)
示例:
MyLV := MyGui.Add("ListView", "r20 w700", ["Name", "In Folder", "Size (KB)", "Type"])
外观:
有关详情, 请参阅 ListView 的单独页面.
一个又高又宽的控件, 其中以日历的格式显示一个月中的所有日子. 用户可以选择单个日期或日期范围.
语法:
GuiCtrl := MyGui.Add("MonthCal", Options, Timestamp) GuiCtrl := MyGui.AddMonthCal(Options, Timestamp)
示例:
MyMC := MyGui.Add("MonthCal")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
Multi: 多选. 允许用户使用 shift-click 或 click-drag 来选择一个连续的日期范围(此时用户仍然可以选择单个日期). 此选项可以显式指定或通过 Timestamp 参数指定一个选择范围的方式自动生效. 一旦控件创建完成, 此选项便无法更改.
RangeMinMax: 限制日历中可以选择的时间范围. 指定 MinMax 为以 YYYYMMDD 格式表示的最小和最大的日期(它们之间使用破折号连接). 例如, Range20050101-20050615 将范围限定在 2005 年的前 5.5 个月之内. 最小或最大的日期可以省略, 此时控件中在这个方向上的日期不受限制. 例如, Range20010101 将禁止选择早于 2001 年的日期, 而 Range-20091231(有前导的破折号) 将禁止选择迟于 2009 年的日期. 如果不含 Range 选项, 则可以选择介于 1601 和 9999 年份之间的任何日期. 无法限制日期的时间部分.
4: 来在每行日期的左边显示周数(1-53). 周数是由操作系统的用户区域设置决定的. 这三种可能的模式在 LOCALE_IFIRSTWEEKOFYEAR 的文档中有详细说明.
8: 禁止控件中当前日期往复循环.
16: 禁止在控件的底部显示今天的日期.
(不常见的数字样式): 有关列表, 请参阅 MonthCal 样式列表
类型: 字符串
如果为空或省略, 将预选今天的日期. 否则, 请以 YYYYMMDD 格式指定 – 要么是一个单独的日期, 要么是一段日期范围(通过在两个日期之间加上破折号来表示. 例如, "20050531" 将预选 2005 年 5 月 31 日, 而 "20050525-20050531" 选择的是 2005 年的 5 月 25 日 到 5 月 31 日 之间的每一天.
通常最好忽略 MonthCal 的宽度(W) 和高度(H), 这样它会自动调整大小来准确适应一个月份. 要垂直地显示多个月份, 请在 Options 中指定 R2 或更高. 要水平地显示多个月份, 请指定 W-2(W 负 2) 或更高. 这两个选项可以同时出现, 此时会在两个方向上扩展.
可以点击控件底部的今日字符串来选择今天的日期. 此外, 还可以点击年份和月份名称来方便地选择新的月份或年份.
键盘导航: 有关支持的键盘快捷方式, 请参阅 DateTime 的键盘导航(带有下拉日历).
当以 YYYYMMDD 格式指定日期时, MM 和/或 DD 部分可以省略, 此时它们默认为 1. 例如, 200205 被视为 20020501, 而 2005 被视为 20050101.
GuiControl.Value 返回所选的以 YYYYMMDD 格式表示的日期(没有任何时间部分). Gui.Submit 储存相同的值. 但是, 存在多选选项时, 会得到以破折号连接的最小和最大日期(例如 20050101-20050108). 在可以多选的日历中如果仅选择单个日期, 则最小和最大日期都会存在但它们是相同的. 可以使用 StrSplit 来分隔日期. 例如, Date := StrSplit(MyMC.Value, "-") 将把最小值放在 Date[1] 中, 最大值放在 Date[2] 中.
当用户更改选择时, 将触发更改事件.
如果该控件具有经典主题外观, 则日历内部数字的颜色遵循 Gui.SetFont 或 c(Color) 选项的设置. 若要更改日历其他部分的颜色, 请使用 SendMessage, 如下例所示:
MCM_SETCOLOR := 0x100A
MCSC_BACKGROUND := 0 ; 总体背景
MCSC_MONTHBK := 4 ; 月历的背景
MCSC_TEXT := 1 ; 月历的文本
MCSC_TITLEBK := 2 ; 标题的背景
MCSC_TITLETEXT := 3 ; 标题的文本
MCSC_TRAILINGTEXT := 5 ; 其他月日期的文本
TitleBackColor := 0xFFAA99 ; 标题的新背景颜色(BGR, 而非 RGB).
TitleTextColor := 0x0066CC ; 标题的新文本颜色(BGR, 而非 RGB).
MyGui := Gui()
MyMC := MyGui.Add("MonthCal", "-Theme")
SendMessage(MCM_SETCOLOR, MCSC_TITLEBK, TitleBackColor, MyMC)
SendMessage(MCM_SETCOLOR, MCSC_TITLETEXT, TitleTextColor, MyMC)
MyGui.Show()
包含图像的区域.
语法:
GuiCtrl := MyGui.Add("Picture", Options, ImageFile) GuiCtrl := MyGui.AddPicture(Options, ImageFile)
示例:
MyPic := MyGui.Add("Picture", "w300 h-1", "C:\My Pictures\Company Logo.gif")
控件类型名称可以是 Picture 或者 Pic.
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
AltSubmit: 该指令会指示程序使用微软的 GDIPlus.dll 来加载图像, 这可能让 GIF, BMP 和图标图像产生不同的外观. 例如, 它可以把含透明背景的 GIF 作为透明的位图进行加载, 这样允许 BackgroundTrans 选项才生效(但图标支持透明效果, 且无需使用 AltSubmit).
Wn 和 Hn: 用于缩放图像的宽度和高度, 其中 n 是一个整数(这些尺寸还决定了从多图标文件中加载哪个图标). 如果某个维度被省略或设为 -1, 则会根据另一个维度自动计算其值, 以保持比例. 如果两个维度都省略, 则使用图像的原始尺寸. 如果某个维度为 0, 则该维度使用原始尺寸. 例如, 指定 w200 h-1 将使图像宽 200 像素, 并自动设置其高度. 如果图片无法加载或显示(例如找不到文件), 抛出一个错误并且不添加控件.
IconN: 若要使用文件中除第一个之外的其他图标组, 请指定 N 为该组的编号. 例如, Icon2 将加载来自第二个图标组的默认图标.
类型: 字符串
图像或多图标文件的名称, 如果未指定绝对路径, 则假定在 A_WorkingDir 中, 或位图或图标句柄, 如 "HBITMAP:" handle.
图片文件: 无需使用 GDIPlus 即可支持的格式包括 GIF, JPG, BMP, ICO, CUR 和 ANI 图片. 对于其他图像格式, 如 PNG, TIF, Exif, WMF 和 EMF, 则默认使用 GDIPlus.
多 Icon 文件: 图标和光标可以从下列类型的文件中加载: ICO, CUR, ANI, EXE, DLL, CPL, SCR 以及包含图标资源的其他类型. 要使用文件中的图标组而不是首个图标, 请使用 Icon 选项.
每当用户点击图片时, 则触发 Click 事件. 也支持 DoubleClick 事件. 只有具有 SS_NOTIFY(0x100) 样式的图片控件才会发送点击和双击通知, 所以 GuiControl.OnEvent 会在点击或双击回调被注册后自动添加此样式. 使用 SS_NOTIFY 样式时, 操作系统会在双击控件时自动将控件的文本复制到剪贴板中.
要使用图片作为其他控件的背景, 则应该在其他控件之前正常添加图片. 然而, 如果这些控件是可输入型并且图片具有 SS_NOTIFY 样式(described above), 那么在其他控件后创建图片控件并在其 Options 包含 0x4000000(这是 WS_CLIPSIBLINGS). 使用此技巧还可以把一个图片设为 Tab 或 ListView 控件的背景.
虽然 GIF 动画文件可以显示在图片控件中, 但实际上它们并不会动起来. 要解决此问题, 请使用 ActiveX 控件. 例如:
; 指定下面的路径到 GIF 文件以实现动态效果(也允许使用本地文件):
pic := "http://www.animatedgif.net/cartoons/A_5odie_e0.gif"
MyGui := Gui()
MyGui.Add("ActiveX", "w100 h150", "mshtml:<img src='" pic "' />")
MyGui.Show()
一个双彩条, 通常用来指示一个操作接近完成的程度.
语法:
GuiCtrl := MyGui.Add("Progress", Options, StartPos) GuiCtrl := MyGui.AddProgress(Options, StartPos)
示例:
MyProgress := MyGui.Add("Progress", "w200 h20 cBlue", 75)
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
CColor: 改变进度条的颜色. 指定 Color 为 16 种基础 HTML 颜色名称之一或 6 位的 RGB 颜色值. 例如: cRed, cFFFF33, cDefault. 如果从没有使用过 C 选项(或指定了 cDefault), 则使用系统默认的进度条颜色.
BackgroundColor: 改变进度条的背景颜色. 指定 Color 为 16 种基础 HTML 颜色名称之一或 6 位的 RGB 颜色值. 例如: BackgroundGreen, BackgroundFFFF33, BackgroundDefault. 如果从没有使用过 Background 选项(或指定了 BackgroundDefault), 则使用窗口的或在进度条后面的 Tab 控件的颜色作为背景颜色.
RangeMinMax: 设置范围为除 0 到 100 以外的其他数值. 指定 MinMax 为最小值, 破折号, 然后是最大值. 例如, Range0-1000 将允许选择一个介于 1 和 1000 之间的数字; Range-50-50 将允许介于 -50 和 50 之间的数字; 而 Range-10--5 将允许介于 -10 和 -5 之间的数字.
Smooth: 显示一个简单的连续条. 如果不使用该选项, 并且进度条没有任何自定义颜色, 则进度条的外观由当前系统主题定义. 否则, 进度条将显示为一段段的长条.
Vertical: 让进度条垂直上升或下降而不是水平移动.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则水平进度条默认为当前字体大小的 15 倍, 而垂直进度条默认为当前字体大小的 2 倍.
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将使控件的高度为 7 行, 而 h400 则将控件的高度设置为 400 像素. 如果同时省略 R 和 H, 水平进度条默认为 2 倍当前字体大小, 而垂直进度条默认为 5 行.
(不常见的数字样式): 有关列表, 请参阅 Progress 样式列表
类型: 整数
如果为空或省略, 进度条的起始位置设定为 0 或者是允许范围内最接近 0 的数值. 否则, 请指定进度条的起始位置.
GuiControl.Value 会返回进度条当前的数值位置. Gui.Submit 则存储相同的值.
若要之后更改进度条的位置, 请参考以下示例:
MyProgress.Value += 20 ; 增加 20 到当前位置. MyProgress.Value := 50 ; 设置当前位置为 50.
对于水平进度条, 其厚度等于控件的高度. 对于垂直进度条, 其厚度则等于控件的宽度.
单选按钮是一个小空圆, 可以被选中(打开) 或不选中(关闭).
语法:
GuiCtrl := MyGui.Add("Radio", Options, Caption) GuiCtrl := MyGui.AddRadio(Options, Caption)
示例:
MyRadio := MyGui.Add("Radio",, "Wait for all items to be in stock before shipping.")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
Checked: 按钮初始状态为 "on" 状态. 单词 Checked 后面可以紧接着跟一个 0 或 1 来表示初始状态(未选中或选中). 换句话说, "Checked" 和 "Checked" VarContainingOne 是一样的.
Group: 创建一个新的单选按钮组.
(不常见的数字样式): 有关列表, 请参阅 Radio 样式列表
类型: 字符串
显示在单选按钮右侧的标注. 这通常用作提示或描述, 它可以包含换行符(`n) 来开始新行..
可以使用一个和符号(&) 让某个字母带下划线, 例如 "&Pause". 中的字母 P, 这允许用户按下 Alt+P 作为其快捷键. 要显示一个原义的和符号, 请指定两个连续的和符号(&&).
此控件经常出现在 单选按钮组, 每组包含两个或多个单选按钮. 当用户点击一个单选按钮来打开它时, 其所在的单选按钮组中其他所有的单选按钮会自动关闭(在单选按钮组中用户也可以使用方向键导航). 在所有连续添加的单选按钮周围会自动创建一个单选按钮组. 要开始一个新组, 新组的首个单选按钮中指定 Group 选项, 或者在新组和之前的组之间简单地添加一个非单选按钮控件, 因为这样会自动开始一个新组.
GuiControl.Value r返回数字 1 表示 "on", 0 表示 "off". 如果要在单选组中检索所选单选选项的位置号, 只需命名其中一个单选按钮, 然后使用 Gui.Submit.
每当用户打开按钮时, 就会触发 Click 事件. 与前一段的单变量模式不同, 事件回调必须为单选组中的每个按钮注册, 并为其调用. 这样就可以灵活地忽略某些按钮的点击.
同时也支持 DoubleClick, Focus 和 LoseFocus 事件. 由于这些事件只有在控件具有 BS_NOTIFY(0x4000) 样式时才会被触发, 所以它是由 GuiControl.OnEvent 自动添加的.
如果在 Options 中指定了宽度(W) 而没有指定行数(R) 或高度(H), 那么在需要时控件的文本将自动换行, 同时自动设置控件的高度.
已知限制: 某些桌面主题可能无法正确的显示单选按钮的文本. 如果遇到此情况, 请尝试在 Options 中包含 -Wrap(负 Wrap). 不过, 这也会阻止多行文本.
一个滑动栏, 用户可以让它沿着垂直或水平轨道移动. 滑动栏的一个常见的例子是在任务栏托盘中的标准音量控件.
语法:
GuiCtrl := MyGui.Add("Slider", Options, StartPos) GuiCtrl := MyGui.AddSlider(Options, StartPos)
示例:
MySlider := MyGui.Add("Slider",, 50)
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
Buddy1ControlID 和 Buddy2ControlID: 自动将最多两个现有的控件定位到滑动条的两侧. Buddy1 显示在左边或顶部(取决于是否存在 Vertical 选项). Buddy2 显示在右侧或底部. 指定 ControlID 为现有控件的名称或 HWND. 例如, Buddy1MyTopText 将分配显式名称为 MyTopText 控件. 也可以使用控件的文本或 ClassNN, 但最多只能使用第一个空格或制表符.
Center: 滑块(用户移动的滑动条) 两端将是钝的, 而不是指向一端(尖的).
Invert: 反转控件, 把较低值作为右边/底端而不是左边/顶端. 此选项常用来让垂直滑动条在传统的音量控件方向上移动. 注 ToolTip 选项不会遵循反转, 因此不应该在这种情况下使用.
Left: 滑块(用户移动的滑动条) 将指向上方而不是下方(原文中为顶端和底端, 这里用上/下方是为了避免和滑动条的顶端/底端混淆). 但如果存在 Vertical 选项, 则滑块将指向左边而不是右边.
LineN: 指定 N 为当用户按下 ↑, →, ↓ 或 ← 时, 要移动的位置数量. 例如, Line2.
NoTicks: 不在轨道旁边显示刻度标记.
PageN: 指定 N 为当用户按下 PgUp 或 PgDn 时, 要移动的位置数量. 例如, Page10.
RangeMinMax: 设置范围为除 0 到 100 以外的其他数值. 指定 MinMax 为最小值, 破折号, 然后是最大值. 例如, Range1-1000 将允许选择一个介于 1 和 1000 之间的数字; Range-50-50 将允许介于 -50 和 50 之间的数字; 而 Range-10--5 将允许介于 -10 和 -5 之间的数字.
ThickN: 指定 N 为滑块(用户移动的滑动条) 的长度(像素). 例如, Thick30. 要超过一定的厚度, 可能需要指定 Center 选项或移除控件的主题(通过在控件的选项中指定 -Theme 来实现).
TickIntervalN: 在轨道旁边指定间隔的位置显示刻度标记. 指定 N 显示附加的刻度标记的间隔(如果间隔从未设置, 则默认为 1). 例如, TickInterval10 将每隔 10 位置显示一个刻度标记.
ToolTip: 创建 tooltip, 当用户拖动滑动条时显示它的数字位置. 要让工具提示不显示在默认位置, 请指定下列单词的其中一个代替: ToolTipLeft 或 ToolTipRight(对于垂直滑动条); ToolTipTop 或 ToolTipBottom(对于水平滑动条).
Vertical: 让控件上下滑动而不是左右滑动.
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则水平滑动条默认为当前字体大小的 15 倍, 而垂直滑动条默认为 30 像素(除非指定了 thickness).
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将使控件为 7 行高, 而 h400 将设置其高度为 400 像素. 如果同时省略 R 和 H, 水平滑动条默认为 30 像素(除非指定了 thickness), 而垂直滑动条默认为 5 行.
(不常见的数字样式): 有关列表, 请参阅 Slider 样式列表
类型: 整数
如果为空或省略, 滑动条初始位置为 0 或允许的范围中最接近 0 的数字. 否则, 请指定滑动条的起始位置.
GuiControl.Value 返回滑块的当前数值位置. Gui.Submit 储存相同的值.
当用户停止移动滑块时(例如在拖动滑块后释放鼠标按钮), 则触发 Change 事件. 如果控件有 AltSubmit 选项, 那么当用户用鼠标拖动滑块时, 每次滑块的可见移动后, 也将触发 Change 事件(非常频繁). 该回调会接收一个数字, 该数字表示滑块的移动方式. 有关详情, 请参阅 Change 事件.
用户可以通过下列方法滑动控件: 1) 使用鼠标拖拉滑动条; 2) 用鼠标在滑动条的轨道区域点击; 3) 当焦点在控件上时转动鼠标滚轮; 或 4) 当焦点在控件上时使用下列按键: ↑, →, ↓, ←, PgUp, PgDn, Home 和 End.
附加到窗口底部的一行文本和/或图标, 通常用来报告状态的变化.
语法:
GuiCtrl := MyGui.Add("StatusBar", Options, Text) GuiCtrl := MyGui.AddStatusBar(Options, Text)
示例:
MySB := MyGui.Add("StatusBar",, "Bar's starting text (omit to start off empty).")
MySB.SetText("There are " RowCount " rows selected.")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
BackgroundColor: 改变控件的背景颜色. 指定 Color 为颜色名称(请参阅图像图表) 或 RGB 值(0x 前缀是均可选的). 例如: BackgroundSilver, BackgroundFFDD99, BackgroundDefault. 注意, 控件必须具有经典主题外观.
(不常见的数字样式): 有关列表, 请参阅 StatusBar 样式列表
类型: 字符串
如果为空或省略, 该控件初始为空. 否则, 请指定控件内部显示的文本内容.
除了图形用户界面控件的默认方法/属性之外, 该控件类型还具有以下方法:
根据指定的宽度将状态栏区域划分成多个部分.
GuiCtrl.SetParts(Width1, Width2, ... Width255)
类型: 整数
如果省略所有参数, 则状态栏恢复为只有一个很长的部分. 否则, 指定除了最后一部分外的其他每个部分的宽度(最后一部分将填充状态栏的剩余宽度). 例如, MySB.SetParts(50, 50) 将创建三个部分: 前两个部分的宽度都为 50, 而最后一部分占据剩余的所有宽度. 数字的单位为像素.
类型: 整数
这个方法返回控件的窗口句柄(HWND).
通过该方法 "删除" 的任何部分在下次显示时都不会显示文本. 此外, 它们的图标会自动销毁.
在指定部分的文本左侧显示一个小图标.
GuiCtrl.SetIcon(FileName , IconNumber, PartNumber)
类型: 字符串
图像或多图标文件的名称, 如 "Shell32.dll", 或位图或图标的句柄, 如 "HICON:" handle. 有关支持的格式列表, 请参阅 Picture. T如果未指定绝对路径, 则假定该文件位于 A_WorkingDir 目录中.
类型: 整数
如果省略, 默认为 1(第一图标组). 否则, 请指定文件中使用的图标组编号. 例如, 2 将使用第二个图标组中的默认图标. 如果为负数, 则假定其绝对值表示可执行文件中图标的资源 ID.
类型: 整数
如果省略, 则默认为 1. 否则, 请指定介于 1 和 256 之间的整数.
类型: 整数
这个方法返回图标的句柄(HICON). HICON 是一种系统资源, 大多数脚本可以安全地忽略它, 因为当状态栏的窗口被销毁时它会被自动销毁. 类似地, 当此方法用新图标替换旧图标时, 旧图标将被销毁. 这可以通过以下方式避免:
SendMessage(0x040F, PartNumber - 1, HICON, MySB) ; 0x040F is SB_SETICON.
状态栏最简单的使用方法是在发生需要向用户报告的变化时调用 SetText. 若要报告多条信息, 请使用 SetParts 把状态栏分成多个部分. 要在状态栏中显示图标, 请调用 SetIcon.
每当用户点击状态栏时, 会触发 Click, DoubleClick, 或 ContextMenu 事件, 并且回调会接受到状态栏部分的编号. 但是, 如果用户点击状态栏右边靠近大小调整手柄的地方时, 目标部分的编号可能是很大的整数.
尽管字体大小, 外观和样式可以使用 GuiControl.SetFont 来设置(像普通控件一样), 但是无法改变文本颜色. 不过, 可以通过使用 Background 选项来更改状态栏的背景颜色.
创建时, 可以使用 MySB := MyGui.Add("StatusBar", "Hidden") 隐藏状态栏. 要在创建后某个时候隐藏它, 请使用 MySB.Visible := false. 要显示时, 请使用 MySB.Visible := true. 注意, 隐藏状态栏不会降低窗口的高度. 如果希望这样, 一个简便的方法是 MyGui.Show("AutoSize").
已知限制: 1) 如果某个控件的位置和状态栏重叠, 那么它有可能会被绘制在状态栏的上方. 避免这种情况的一种方法是通过 Size 事件动态地缩小这样的控件. 2) 位置和尺寸选项被忽略. 3) 每个窗口只允许有一个状态栏控件.
TreeView 示例 #1 展示了一个多部分状态栏的示例.
一个包含多个页面的大型控件, 其中每个页面包含其他控件. 从这里开始, 这些页面被称为 "选项卡(标签页)".
语法:
GuiCtrl := MyGui.Add("Tab", Options, TabNames) GuiCtrl := MyGui.AddTab(Options, TabNames)
示例:
MyTab := MyGui.Add("Tab",, ["General", "View", "Settings"])
外观:
控件类型名称可以是 Tab, Tab2 或 Tab3:
Tab: 保留向后兼容性, 因为 Tab 和 Tab2/Tab3 之间的行为差异.
Tab2: 修正了原有 "Tab" 控件罕见的重绘问题, 但是引入了一些其他问题.
Tab3: 推荐. 修复若干影响 Tab 和 Tab2 的问题. 各控件位于一个可见的 "tab dialog(标签页对话框)", 其位置和大小随选项卡控件的移动和大小的改变而改变. 选项卡控件使用默认主题.
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
ChooseN: 指定 N 为要预选的选项卡编号. 例如, Choose5 会预选第五个选项卡(和其他选项一样, 它也可以为变量, 例如 "Choose" Var). 要在控件创建后改变选择的选项卡或添加/移除选项卡, 请使用 GuiControl.Choose.
Background: 指定 -Background(负 background) 覆盖窗口的自定义背景颜色, 而使用系统默认的 Tab 控件的颜色.
Theme: 让选项卡控件适应于当前桌面主题. 然而, 在这样选项卡控件内的大多数类型的控件看起来会很奇怪, 因为它们的背景颜色不匹配选项卡控件的背景颜色. 对于某些类型的控件(例如 Text), 这种情况可以在它们的选项中添加 BackgroundTrans 来修复. Tab3 默认是主题化的, 不需要这个来修复.
Buttons: 在控件的顶部创建一系列按钮而不是选项卡(此时在默认情况下, 将没有边界, 因为显示的区域实际并不包含控件).
Left, Right 或 Bottom: 指定这些单词的其中一个让选项卡显示在左边, 右边或底部而不是顶部. 有关 Left 和 Right 的限制, 请参阅 TCS_VERTICAL.
Wrap: 指定 -Wrap(负 Wrap) 阻止选项卡占用多行(此时为了适应过多的选项卡, 会显示箭头按钮以允许用户滑动来查看更多选项卡).
Wn: 设置控件的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果省略, 则默认值为当前字体大小的 30 倍, 加上 3 倍 X-边距. 带有子控件的 Tab3 忽略此默认值.
Rn 或 Hn: 设置控件的高度. 例如, 指定 r7 将在控件内预留 7 行空间, 而 h400 则将控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则默认值为 10 行. 带有子控件的 Tab3 忽略此默认值.
(不常见的数字样式): 有关列表, 请参阅 Tab 样式列表
类型: Array
一个标签页名称的数组, 如 ["Red", "Green", "Blue"]. 在控件创建完成后, 若要添加或删除标签页, 请使用 GuiControl.Add 或 GuiControl.Delete.
除了图形用户界面控件的默认方法/属性之外, 该控件类型还具有以下方法:
会使后续添加的控件归属于某个标签页.
GuiCtrl.UseTab(Tab, FullNameMatch)
如果为空或省略, 则默认为 0, 随后的创建的控件将被添加到 Tab 控件之外. 否则, 指定 1 表示第一个选项卡, 2 表示第二个, 等等.
如果指定了一个字符串(即使是数字字符串), UseTab 会依次遍历所有标签名称, 直到找到匹配项. 搜索不区分大小写. 若要更改匹配行为, 请使用 FullNameMatch.
类型: 布尔值
如果省略, 则默认为 false.
如果为 false, 则会使用名称以该字符串开头的标签. 例如, 如果控件中包含标签 "UNIX Text", 指定单词 unix(小写) 就足以使用它.
如果为 true, 那么名称完全与该字符串完全匹配的标签才会被使用.
创建选项卡控件后, 随后添加的控件自动属于其首个选项卡. 这可以通过使用 UseTab 在任何时候改变, 如下所示:
MyTab.UseTab() ; 随后的控件不属于任何选项卡控件的一部分.
MyTab.UseTab(3) ; 随后的控件属于当前选项卡控件的第三个选项卡.
MyTab2.UseTab(3) ; 随后的控件属于第二个选项卡控件的第三个选项卡.
MyTab.UseTab("Name") ; 随后的控件属于名称以 Name(不区分大小写) 开始的选项卡.
MyTab.UseTab("Name", true) ; 与上面相同, 不过这里需要准确匹配(并区分大小写).
还可以使用上面的每个例子分配控件到还不存在的选项卡或选项卡控件(不包括使用 Name 方法的情况). 但在此情况下, 不支持下面描述的相对位置选项.
当一个 Tab 控件的每个选项卡接收到其首个子控件, 此子控件在下列情况下将具有特殊的默认位置: 1) 同时省略 X 和 Y 坐标, 此时首个子控件放在选项卡控件内部的左上角(带有标准的 X-边距和 Y-边距), 而首个子控件后的其他子控件放在之前控件的下面; 2) 指定了 X+n 和/或 Y+n 位置选项, 此时子控件放在相对于选项卡控件内部的左上角的位置. 例如, 指定 x+10 y+10 会把控件放置在左上角往右和往下各 10 个像素的位置.
GuiControl.Value 返回当前选中的标签页的位置编号(第一个标签页是 1, 第一个标签页是 2, 等等), 或者如果未选中任何标签, 则返回 0, 而 GuiControl.Text 返回当前选中标签的文本. Gui.Submit 会存储文本, 除非该控件具有 AltSubmit 选项, 此时它会存储标签的索引.
每当用户切换到一个新的标签页时, 就会触发 Change 事件.
键盘导航: 用户可以按下 Ctrl+PgDn/PgUp 来在选项卡控件的页面间导航; 如果键盘焦点在不属于选项卡的控件上, 则会导航到窗口的首个选项卡控件. 也可以使用 Ctrl+Tab 和 Ctrl+Shift+Tab, 除非当前焦点控件在多行编辑控件中(此时它们不起作用).
每个窗口的选项卡控件不能超过 255 个. 每个选项卡控件不能含有超过 256 个选项卡(页面). 此外, 选项卡控件不能包含其他选项卡控件.
注意: "Tab 控件" 是三种类型(Tab, Tab2 和 Tab3) 的统称. 在本节中, 若明确指的是原始的 "Tab" 控件, 则将其标注为 "Tab1" 以避免混淆.
父窗口: 控件的父窗口影响控件的位置和可见性以及 Tab 键的导航顺序. 如果子控件添加到已存在的 Tab3 选项卡控件, 其父窗口是 "tab dialog", 该父窗口填充选项卡控件的显示区域. 大部分其他控件, 包括 Tab1 或 Tab2 中的子控件, 没有父窗口除了 Gui 界面本身.
位置: 对于 Tab1 和 Tab2, 子控件不需要在他们的选项卡控件的边界内: 当标签页是激活或未激活时, 他们总是会显示和隐藏. 这种行为特别适合 Buttons 选项.
对于 Tab3, 在标签页控件创建之 前 添加子控件的行为与 Tab1 或 Tab2 是一致的. 所有其他子控件只在 Tab3 控件的显示区域内可见.
如果移动 Tab3 控件, 他的子控件也随之移动. Tab 和 Tab2 控件没有这个行为.
在极少数情况下, WinMove (或等效的 DllCall) 用于移动控件, 坐标必须相对于控件的父窗口, 而不是 Gui(请参阅上面的信息). 相比之下, GuiControl.Move 使用 GUI 坐标和 ControlMove 使用窗口坐标, 这些与控件的父窗口无关.
自动尺寸: 如果脚本没有指定, 在下列情况下 Tab3 控件的宽度和/或高度将会自动计算(在控件创建后以先到者为准):
存在的子控件计算尺寸时, 自动调整的尺寸再加上默认边距. 尺寸只计算一次, 即使添加控件也不会重新计算. 如果 Tab3 控件是空的, 与 Tab1 或 Tab2 控件相同的默认大小.
Tab1 和 Tab2 控件不会自动计算尺寸; 它们接受任意默认大小.
Tab 键导航顺序: Tab 导航顺序通常取决于控件创建的顺序. 当选项卡控件激活时, 顺序也取决于选项卡控件的类型:
通知消息(Tab3): 通用和 Custom 控件通常向他们的父窗口发送通知消息. Tab3 控件的 tab dialog 接收到的任何 WM_COMMAND, WM_NOTIFY, WM_VSCROLL, WM_HSCROLL 或 WM_CTLCOLOR 消息转发到 GUI 窗口和能被 OnMessage 检测. 如果标签页控件使用主题并且其子控件没有 BackgroundTrans 选项, tab dialog 处理 WM_CTLCOLORSTATIC 消息而不转发. 其他的通知消息(例如自定义消息) 不被支持.
Tab2 的已知问题:
Tab1 的已知问题:
包含用户不能编辑的无边界文本的区域. 常用来标识其他控件.
语法:
GuiCtrl := MyGui.Add("Text", Options, String) GuiCtrl := MyGui.AddText(Options, String)
示例:
MyText := MyGui.Add("Text",, "Please enter your name:")
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
(不常见的数字样式): 有关列表, 请参阅 Text 样式列表
类型: 字符串
要显示的字符串, 它可以包含换行符(`n) 来开始新行. 此外, 一个长行可以使用延续片段的方法分成较短的几行.
可以使用一个和符号(&) 让某个字母带下划线, 例如 "&First Name"中的字母 F. 这允许用户按下快捷键 Alt+F 来将键盘焦点设置到在 Text 控件之后添加的第一个可输入的控件上. 要显示一个原义的和符号, 请指定两个连续的和符号(&&). 要取消控件中和符号的特殊含义, 请在控件的 Options 中包含 0x80.
每当用户点击文本时, 就会触发 Click 事件. 同时, 也支持 DoubleClick 事件. 只有带有 SS_NOTIFY(0x100) 样式的文本控件才能发送单击和双击通知, 所以在注册单击或双击回调时, GuiControl.OnEvent 自动添加这种样式. SS_NOTIFY 样式会导致操作系统在双击控件时自动将其文本复制到剪贴板.
如果 Options 中指定了宽度(W) 而没有指定行数(R) 或高度(H), 那么在需要时控件的文本将自动换行, 同时自动设置控件的高度.
TreeView 通过缩进父项目下的子项目来显示出层级关系. 最常见的例子是资源管理器的驱动器和文件夹树.
语法:
GuiCtrl := MyGui.Add("TreeView", Options) GuiCtrl := MyGui.AddTreeView(Options)
示例:
MyTV := MyGui.Add("TreeView", "r10")
外观:
有关详情, 请参阅 TreeView 的单独页面.
一对箭头组成的按钮, 用户点击后会增加或减少值. 默认情况下 UpDown 控件自动依附于前一个添加的控件上. 这里的前一个控件被称为 UpDown 的 伙伴控件.
语法:
GuiCtrl := MyGui.Add("UpDown", Options, StartPos) GuiCtrl := MyGui.AddUpDown(Options, StartPos)
示例:
MyGui.Add("Edit")
MyUD := MyGui.Add("UpDown", "Range1-10", 5)
外观:
类型: 字符串
除了常规选项和样式之外, 以下内容也是被支持或值得关注的::
Horz: 使控件的按钮点指向左/右而不是上/下. 默认情况下, Horz 还会让控件变成孤立的(没有伙伴控件). 通过在控件选项中指定 Horz 16 可以覆盖此特性.
Left: 把 UpDown 放在其伙伴控件的左边而不是右边.
RangeMinMax: 设置范围为除 0 到 100 以外的其他数值. 指定 MinMax 为最小值, 破折号, 然后是最大值. 例如, Range1-1000 将允许选择一个介于 1 和 1000 之间的数字; Range-50-50 将允许介于 -50 和 50 之间的数字; 而 Range-10--5 将允许介于 -10 和 -5 之间的数字. 交换最小值和最大值可以让箭头往与正常方向相反的方向移动. 最大的允许范围是 -2147483648-2147483647. 最后, 如果伙伴控件为 ListBox, 那么垂直的默认范围是 32767-0, 而水平的则相反.
Wrap: 当用户试图超出最小值或最大值时使得控件返回到其范围的另一端. 如果省略, 当达到最小值或最大值时控件会停止.
16: 指定 -16(负 16) 让垂直的 UpDown 成为孤立的; 即让它没有伙伴控件. 这还可以让控件符合任何指定的宽度, 高度和位置而不是适应于其伙伴控件的大小. 此外, 孤立的 UpDown 会内部跟踪它自己的位置. 此位置可以通过诸如 GuiControl.Value 这样的方法正常获取.
0x80: 在伙伴控件中, 省略了通常存在于每三个小数位之间的小数点分隔符. 然而, 通常不使用此样式, 因为当脚本从 UpDown 控件(而不是其伙伴控件) 获取的数字中不包含分隔符.
Wn: 设置孤立 UpDown 的宽度. 例如, 指定 w400 将使该控件的宽度为 400 像素. 如果忽略, 则垂直 UpDown 默认为当前字体大小的 2 倍, 而水平的 UpDown 默认为当前字体大小的 15 倍.
Rn 或 Hn: 设置孤立 UpDown 的高度. 例如, 指定 r7 将为控件预留 7 行空间, 而 h400 则将控件的总高度设置为 400 像素. 如果同时省略 R 和 H, 则垂直 UpDown 默认为 5 行, 而水平的 UpDown 默认 2 倍当前字体大小.
(不常见的数字样式): 有关列表, 请参阅 UpDown 样式列表
类型: 整数
如果为空或省略, UpDown 的起始位置设定为 0 或者是允许范围内最接近 0 的数值. 否则, 请指定 UpDown 的起始位置.
最常见的例子是 "微调器", UpDown 附加到 Edit 控件. 每当用户按下其中一个箭头按钮时, Edit 控件中的数字就会自动增加或减少.
UpDown 的伙伴控件也可以是 Text 或 ListBox 控件. 然而, 由于操作系统的限制, 除了这些以外的其他控件类型(例如 ComboBox 和 DropDownList) 可能无法和 Change 事件以及其他特性一起正常工作.
GuiControl.Value 返回 UpDown 的当前数字位置. Gui.Submit 储存同样的值. 如果 UpDown 与 Edit 控件相连, 而您又不想验证用户的输入, 那么最好使用 UpDown 的值而不是 Edit 的值. 这是因为 UpDown 总是会产生一个范围内的数字, 即使用户在编辑控件中输入了一些非数字或超出范围的数字. 与此相关的是, 超过三位数的数字默认会有一个千位分隔符(如逗号). 这些分隔符是由 Edit 控件返回的, 但不是由 UpDown 控件返回的.
每当用户点击一个箭头按钮或按下键盘上的一个箭头键时, 就会触发 Change 事件.
若要将 UpDown 控件的增量值更改为 1 以外的其他数值(如 5 或 0.1), 请参阅这个脚本.
在伙伴控件中显示的数字格式可以由十进制更改为十六进制, 如下例所示:
SendMessage 0x046D, 16, 0, MyUD ; 0x046D 为 UDM_SETBASE.
但是, 这只影响伙伴控件, 而不影响 UpDown 报告的位置.