# GUI 控件类型

## 目录

- Text, Edit, UpDown, Picture
- Button, Checkbox, Radio
- DropDownList, ComboBox
- ListBox, ListView, TreeView
- Hotkey, DateTime, MonthCal
- Slider, Progress
- GroupBox, Tab2, StatusBar, Internet Explorer Control

## Text

描述: 一个不包含边界的文本区域, 用户不能编辑其中的文本. 常用来标识其他控件。

    例如: Gui, Add, Text,, Please enter your name:

此时, 最后一个参数为需要显示的字符串. 它可以包含换行符 (`n) 来开始新行. 此外, 一个长行可以使用 字串分段 的方法分成较短的几行.

如果 选项 中指定了宽度 (W) 而没有指定 行数 (R) 或 高度 (H), 需要时文本将自动换行, 同时将自动设置控件的高度.

因为控件的内容是 Gui 命令的最后一个参数, 所以可以直接使用逗号而不需要转义. 对于所有其他命令的最后一个参数也是如此.

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得当用户点击文本时 MySubroutine 标签会自动运行. 这可以用来模仿带下划线的蓝色超级链接, 如下面的工作脚本所示:

    Gui, Font, underline
    Gui, Add, Text, cBlue gLaunchGoogle, Click here to launch Google.
    Gui, Font, norm
    Gui, Show
    return

    LaunchGoogle:
    Run www.google.com
    return

通过检查 A_GuiEvent 是否包含单词 DoubleClick 可以检测到双击事件.

在文本中使用符号 (&) 可以给一个字母加下划线. 例如:

    Gui, Add, Text,, &First Name:
    Gui, Add, Edit

在上述示例中, 字母 F 将被添加下划线, 这允许用户按下 快捷键 Alt+F 将键盘焦点设置到此文本控件后添加的首个可输入型控件中. 要显示一个原义的 (&) 符号, 请指定两个连续的 (&&) 符号. 要取消控件中对 & 符号的特殊处理, 请在控件的选项中包含 0x80.

请参看 常规选项 来了解其他选项例如 Right, Center, 和 Hidden. 也请参见: 控件的位置和大小.

## Edit

描述: 用户可以输入自由格式的文本区域.

    例如: Gui, Add, Edit, r9 vMyEdit, Text to appear inside the edit control (omit this parameter to start off empty).

如果控件中有多行的文本, 则它将是多行的. 例如, 在 选项 中指定 r3 将创建一个拥有后面那些默认属性的 3 行编辑控件: 一个垂直滚动条, 启用自动换行, 并且捕获的回车键作为输入的一部分而不触发窗口的 默认按钮.

要在多行编辑控件中开始一个新行, 最后一个参数中 (内容) 可以包含一个单独的换行符 (`n) 或一个回车换行符 (`r`n). 这两种方法都会在 Edit 控件中产生原义的 `r`n 对. 然而, 当控件通过 Gui Submit 或 GuiControlGet 把内容保存到其变量中时, 文本中的每对 `r`n 总是被转换成单独的换行符 (`n). 要把文本写入到文件中, 请参照此例: FileAppend, %MyEdit%, C:\Saved File.txt

如果控件启用了自动换行 (对于多行编辑控件默认是启用的), 用户输入时任何自动换行的地方不会产生换行字符 (仅回车键才会).

虽然在 Windows 95/98/Me 系统中多行编辑控件最多包含 64 KB 的文本, 但在 Windows NT/2k/XP 或更高版本的系统中它们可以包含多达 4G 的文本. 当用户输入文本时, 根据需要分配更多的内存.

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得当用户或脚本改变控件的内容时 MySubroutine 标签会自动运行.

提示: 要加载一个文本文件到 Edit 控件中, 请使用 FileRead 和 GuiControl. 例如：

    Gui, Add, Edit, R20 vMyEdit
    FileRead, FileContents, C:\My File.txt
    GuiControl,, MyEdit, %FileContents%

Edit 选项 (要移除而不是添加一个选项, 请在选项前加上一个负号):

Limit: 限制用户的输入在编辑区域的可见宽度内. 另外, 要限制输入指定数目的字符, 请在选项后跟着一个数字. 例如, Limit10 将允许输入不超过 10 个字符.

Lowercase: 用户输入的字符自动转换成小写.

Multi: 使控件可以含有多行的文本. 然而, 通常没必要指定此选项因为它会根据高度 (H), 行数 (R), 或内容 (Text) 自动判断.

Number: 阻止用户输入非数字的其他字符到编辑区域 (然而, 还是有可能粘贴非数字的字符到里面). 强制数字输入的另一种方法是添加一个 UpDown 控件到此 Edit 编辑控件中.

Password: 通过将用户的输入替代为屏蔽字符来隐藏用户的输入 (例如对于密码输入). 如果想使用非默认的屏蔽字符, 请在单词 Password 后加上此符号. 例如, Password* 将使用星号而不是黑色圆 (项目符号) 作为屏蔽符号, 这是 Windows XP 中的默认屏蔽符号. 注: 对于多行编辑控件此选项无效.

ReadOnly: 阻止用户改变控件的内容. 然而, 仍然可以滚动, 选择文本或将文本复制到剪贴板.

Tn: 字母 T 可以用来设置 多行编辑控件 的制表位 (因为制表位决定了原义的 TAB 符号将跳转的列位置, 它们可以把文本格式成列). 如果没有使用字母 T, 则每 32 个对话框单位设置一次制表位 (每个对话框单位的宽度由操作系统决定). 如果仅使用一次字母 T, 每 n 个单元设置一次制表位横跨整个控件的宽度. 例如, Gui, Add, Edit, vMyEdit r16 t64 将设置制表位之间的距离为默认的两倍. 要自定义制表位, 请多次指定字母 T, 如后面的例子所示: Gui, Add, Edit, vMyEdit r16 t8 t16 t32 t64 t128. 在列表中每个绝对的列位置设置一个制表位, 制表位数目最大可达 50 个. 注: 制表位适用于多行编辑控件.

Uppercase: 用户输入的字符自动转换成大写.

WantCtrlA [v1.0.44+]: 指定 -WantCtrlA (负 WantCtrlA) 可以阻止用户按下 Control-A 来选择编辑控件中的所有文本.

WantReturn: 指定 -WantReturn (即一个负号跟着 WantReturn) 以避免多行编辑控件捕获 Enter 键击. 此时按下 Enter 键相当于按了窗口的 默认按钮 (如果有的话). 在这种情况下, 用户可以按下 Control-Enter 组合键开始一个新行.

WantTab: 使得一个 tab 键击产生一个制表符而不是导航到下一个控件. 如果没有这个选项, 在多行编辑控件中用户可以按下 Control-Tab 来产生一个制表符. 注: 虽然 WantTab 也可以用于单行编辑控件, 但此时每个制表符显示为一个空框字符 (尽管其保存为真正的 tab).

-Wrap (负 wrap): 关闭多行编辑控件中的自动换行属性. 由于在控件创建后不能改变此样式, 请使用下列方法的其中一个来改变它: 1) 销毁 后重新创建窗口和其中的控件; 或 2) 创建两个重叠的编辑控件, 其中一个启用自动换行而另一个禁用. 当前没有使用的那个可以保持空的和/或隐藏.

请参看 常规选项 来了解其他选项例如 Right, Center, 和 Hidden.也请参见: 控件的位置和大小.

一个更强大的编辑控件: HiEdit 是一个免费, 多标签页, 支持大文件而消耗很少内存的编辑控件. 它可以编辑文本和二进制文件.需要了解详情和演示, 请参见 www.autohotkey.com/forum/topic19141.html

## UpDown

描述: 一对箭头组成的按钮, 用户点击后会增加或减少值. 默认情况下, 一个 UpDown 控件自动依附于前一个添加的控件上. 这里的前一个控件被称为 UpDown 的 伙伴控件. 最常见的例子是 "旋转器", 这是 UpDown 依附到一个 Edit 控件. 例如：

    Gui, Add, Edit
    Gui, Add, UpDown, vMyUpDown Range1-10, 5

在上面的例子中, Edit 控件是 UpDown 的伙伴控件. 每当用户按下了增减按钮的其中一个, Edit 控件中的数字会自动增加或减少.

一个 UpDown 的伙伴控件也可以是一个 Text 控件 或 ListBox. 然而, 由于操作系统的限制, 除了这些以外的其他控件类型 (例如 ComboBox 和 DropDownList) 可能无法和 g-label 以及其他的特性一起正常工作.

在最后一个参数中可以指定 UpDown 的初始位置 (如果省略, 初始为 0 或允许的范围中最接近 0 的数字).

使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 会接收到 UpDown 当前的数字位置. 如果 UpDown 依附于一个编辑控件而您不想确认用户的输入, 此时最好使用 UpDown 的值而不是编辑控件的. 这是因为 UpDown 将总是产生一个允许范围内的数字, 即使用户在编辑控件中输入了非数字或超出范围的内容. 相关提示, 默认情况下超过三位的数字会添加 千位分隔符 (例如逗号). 这些分隔符保存在编辑控件的输出变量中, 但不在 UpDown 的变量中.

如果 UpDown 有一个 g-label, 当用户点击增减按钮的其中一个或按下了键盘上的方向键时它将会运行. 每个运行的 g-label 都会保存 UpDown 的位置到其 关联的输出变量 (如果有的话).

UpDown 选项:

Horz: 使控件的按钮点指向左/右而不是上/下. 默认情况下, Horz 也使得控件孤立的 (没有伙伴控件). 通过在控件的选项中指定 Horz 16 可以覆盖此特性.

Left: 把 UpDown 放在其伙伴控件的左边而不是右边.

Range: 设置 0 到 100 外的其他范围. 在单词 Range 后指定最小值, 一个破折号和最大值.例如, Range1-1000 将允许选择一个介于 1 和 1000 之间的数字; Range-50-50 将允许一个介于 -50 和 50 之间的数字; 而 Range-10--5 将允许一个介于 -10 和 -5 之间的数字.交换最小值和最大值会导致箭头往与正常方向相反的方向移动. 最大的允许范围是 -2147483648-2147483647. 然而, Windows 95 和 NT4 需要安装 Internet Explorer 5.0 或更高版本才能支持超出 -32767-32767 的范围. 最后, 如果伙伴控件是一个 ListBox, 垂直的默认范围是 32767-0 而水平的则反向 (Horz).

Wrap: 当用户试图超出最小值或最大值时使得控件返回到其范围的另一端. 如果没有 Wrap, 当达到最小值或最大值时控件会停止.

-16 (负 16): 让垂直的 UpDown 孤立; 即它没有伙伴控件. 这也使得控件符合任何指定的宽度, 高度和位置而不是适应于其伙伴控件的大小. 此外, 一个孤立的 UpDown 内部跟踪其自己的位置. 通过如 Gui Submit 命令可以正常获取此位置.

0x80: 在 选项 中包含 0x80 来省略伙伴控件中正常出现在每三位十进制数间的千位分隔符. 然而, 通常不使用此样式因为当脚本从 UpDown 控件 (而不是其伙伴控件) 获取的数字中分隔符是省略的 .

使用 1 以外的其他增量: 在 此脚本 中, NumEric 演示了如何改变一个 UpDown 增量为 1 以外的其他值(例如 5 或 0.1).

也请参见: 控件的位置和大小.

## Picture (或 Pic)

描述: 包含图像的一个区域 (关于支持的文件类型请参见最后两段). 最后一个参数是图像的文件名, 如果没有指定一个绝对路径则假定在 A_WorkingDir 中.

    示例: Gui, Add, Picture, w300 h-1, C:\My Pictures\Company Logo.gif

为了保持图像的实际宽度和/或高度, 请省略 W 和/或 H 选项. 否则, 调整图像的尺寸到指定的宽度和/或高度 (此宽度和高度也决定了从多图标的的 .ICO 文件中加载哪个图标). 要保持高宽比放大缩小图像, 请在其中一个尺寸指定 -1 而在另一个中指定正数. 例如, 指定 "w200 h-1" 将使得图像缩放成 200 像素的宽度同时自动设置其高度. 如果无法加载图片或无法显示 (例如找不到文件), 则控件被留空并且其宽度和高度设置为 0.

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得用户点击图片时 MySubroutine 标签会自动运行. 通过检查 A_GuiEvent 是否包含单词 DoubleClick 可以检测到双击事件.

要使用图片作为其他控件的背景, 应该在其他控件之前正常添加图片. 然而, 如果这些控件是可输入型控件并且此图片有 g-label, 那么在其他控件后创建图片控件并在其 选项 中包含 0x4000000 (这是 WS_CLIPSIBLINGS). 此技巧也可以让一个图片成为 Tab 控件 或 ListView 的背景.

图标, 光标和动画光标: 图标和光标可以从下列文件的类型中加载: ICO, CUR, ANI, EXE, DLL, CPL, SCR, 和包含图标资源的其他类型. 要使用图标组而不是文件中首个图标, 请在 选项 中包含单词 Icon 和图标组编号. 在下面的例子中, 将使用第二个图标组中的默认图标: Gui, Add, Picture, Icon2, C:\My Application.exe

在 选项 中指定单词 AltSubmit 告诉程序使用微软的 GDIPlus.dll 来加载图像, 这可能让 GIF, BMP, 和图标图像产生不同的外观. 例如, 它可以加载一个背景透明的 ICO/GIF 作为透明的位图, 此时 BackgroundTrans 选项才生效. 如果 GDIPlus 不可用 (见下段), AltSubmit 选项被忽略而使用常规方法加载图像.

在所有的操作系统中都支持 GIF, JPG, BMP, ICO, CUR, 和 ANI 图像. 在 Windows XP 或更高版本的系统中, 还支持其他图像格式例如 PNG, TIF, Exif, WMF, 和 EMF. 通过复制微软的免费 GDI+ DLL 到 AutoHotkey.exe 文件夹中可以让 XP 之前的操作系统提供支持 (但如果是 已编译脚本, 则需要复制 DLL 到脚本的文件夹). 要下载此 DLL, 请在 www.microsoft.com 中搜索下列短语: gdi redistributable

由于操作系统漏洞, 尺寸大于 90x90 的动画光标在 Windows 95/98/Me 中可能让脚本崩溃.

GIF 动画: 虽然 GIF 动画文件可以显示在图片控件中, 但它们实际上并不会动起来. 为了解决此问题, 请使用 AniGIF DLL (对非商业用途免费), 观看演示请到 www.autohotkey.com/forum/topic19264.html

## Button

描述: 一个按钮, 按下它可以触发一个动作. 此时最后一个参数为按钮的名称 (显示在按钮上), 其中可以包含换行符 (`n) 来开始新行.

    例如: Gui, Add, Button, Default, OK

上面的例子在其 选项 中包含单词 Default 让 "OK" 成为默认按钮. 每当用户按下 ENTER 时默认按钮的动作会自动触发, 除非此时键盘焦点在另一个按钮上或含有 WantReturn 样式的多行编辑控件中. 要在以后改变默认按钮为另一个按钮, 请参照此例, 这让 Cancel 按钮成为默认按钮: GuiControl, +default, Cancel. 要在以后让窗口没有默认按钮, 请参照此例: GuiControl, -default, OK

在按钮名称中使用符号 (&) 可以给一个字母加下划线. 例如:

    Gui, Add, Button,, &Pause

在上述示例中, 字母 P 将被添加下划线, 这可以让用户按下 Alt+P 作为其 快捷键. 要显示一个原义的 (&) 符号, 请指定两个连续的 (&&) 符号.

如果一个按钮没有明确的 g-label, 则使用一个自动标签. 例如, 如果首个 GUI 窗口包含一个 OK 按钮, 则当按下此按钮时将运行 ButtonOK 标签 (如果存在). 对于 非首个 GUI 窗口, 需要在按钮的自动标签前加上窗口编号; 例如: 2ButtonOK.

如果按钮上文字包含空格或 &`r`n`t` 集合中任意一个字符, 其自动标签会忽略这些字符. 例如, 一个名为 "&Pause" 的按钮其自动标签的名称将为 ButtonPause. 同样, 一个名为 "Save && Exit" 的按钮其自动标签的名称将为 ButtonSaveExit (两个连续的 (&&) 符号用来显示单个原义的符号 (&)).

已知的限制: 某些桌面主题可能无法正确的显示按钮文本. 如果遇到此情况, 请尝试在按钮的选项中包含 -Wrap (负 Wrap). 不过, 这也使得按钮名称无法含有多行文本.

## Checkbox

描述: 一个小方框, 可以选中或取消选中来表示 On/Off, Yes/No, 等.

    例如: Gui, Add, Checkbox, vShipToBillingAddress, Ship to billing address?

最后一个参数是紧跟着方框显示的标注, 这通常是关于复选框起什么作用的提示或描述. 它可以包含换行符 (`n) 来开始新的一行.如果 选项 中指定了宽度 (W) 而没有指定 行数 (R) 或高度 (H), 需要时控件的文本将自动换行, 同时将自动设置控件的高度. 在选中时复选框的 关联输出变量 (如果有的话) 接收到数字 1, 未选中时为 0, 而灰色/不确定时为 -1.

在 选项 中指定单词 Check3 来启用第三种状态即显示灰色的选中标记而不是黑色的 (灰色状态表示复选框既不处于选中状态也不处于未选中状态). 在 选项 中指定单词 Checked 或 CheckedGray 可以让复选框初始状态分别为黑色选中状态或灰色状态. 在单词 Checked 后面可选跟着一个 0, 1, 或 -1 来表示初始状态. 换言之, "Checked" 和 "Checked%VarContainingOne%" 是一样的.

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得用户点击或改变复选框状态时 MySubroutine 标签会自动运行.

已知的限制: 某些桌面主题可能无法正确的显示按钮文本.如果遇到此情况, 请尝试在按钮的选项中包含 -Wrap (负 Wrap).不过, 这也使得按钮名称无法含有多行文本.

## Radio

单选按钮是一个小空圆, 可以被选中 (打开) 或不选中 (关闭).

    例如: Gui, Add, Radio, vMyRadioGroup, Wait for all items to be in stock before shipping.

此控件通常出现在 单选按钮组, 每组包含两个或多个单选按钮. 当用户点击一个单选按钮打开时, 其所在的单选按钮组中其他所有的单选按钮会自动关闭 (在单选按钮组中用户也可以使用方向键导航). 在所有连续添加的单选按钮周围会自动创建一个单选按钮组. 要开始一个新组, 请在新组的首个单选按钮的 选项 中指定单词 Group -- 或在新组和之前的组之间简单的添加一个非单选按钮控件, 因为这会自动开始一个新组.

在最后一个参数中指定的标注会显示在单选按钮的右侧. 此标注通常作为提示或描述, 它可以包含换行符 (`n) 来开始新的一行. 如果 选项 中指定了宽度 (W) 而没有指定 行数 (R) 或高度 (H), 需要时控件的文本将自动换行, 同时将自动设置控件的高度.

在 选项 指定单词 Checked 可以让按钮初始为选中状态. 在单词 Checked 后面可选跟着一个 0 或 1 来表示初始状态: 0 表示未选中而 1 表示选中. 换言之, "Checked" 和 "Checked%VarContainingOne%" 是一样的.

选中时单选按钮的 关联输出变量 (如果有的话) 接收到数字 1而未选中时为 0.但是, 如果单选组中仅有一个按钮含有关联变量, 此变量将接收当前选择按钮的编号: 首个单选按钮为 1 (根据原来创建的顺序), 第二个为 2, 依此类推. 如果没有选择的按钮, 则保存 0.

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得用户选中按钮时 MySubroutine 标签会自动运行. 与之前段中的单变量模式不同, 必须为单选按钮组中每个按钮指定 g-label 这样选中某个按钮时相应的标签才会运行. 这样可以灵活的忽略某些按钮的点击. 最后, 通过检查 A_GuiEvent 是否包含单词 DoubleClick 可以检测到双击事件.

已知的限制: 某些桌面主题可能无法正确的显示按钮文本.如果遇到此情况, 请尝试在按钮的选项中包含 -Wrap (负 Wrap).不过, 这也使得按钮名称无法含有多行文本.

## DropDownList (或 DDL)

描述: 一个选择列表, 当按下一个小按钮时显示. 此时最后一个参数是管道分隔的选择列表例如 Choice1|Choice2|Choice3.

    例如: Gui, Add, DropDownList, vColorChoice, Black|White|Red|Green|Blue

要在窗口初次出现时预选其中的某项, 请在此项后包含两个管道符. 或者, 在 选项 中包含单词 Choose 接着预选的项编号. 例如, Choose5 将预选第五项 (和其他选项一样, 它也可以是一个变量例如 Choose%Var%). 要在控件创建后改变选择或添加/移除列表中的条目, 请使用 GuiControl.

在 选项 指定单词 Uppercase 或 Lowercase 会把列表中的所有项目自动转换成大写字母或小写字母. 指定单词 Sort 会按字母顺序自动排列列表的内容 (这也影响后面通过 GuiControl 添加的所有项目). Sort 选项同时启用了每当弹出下拉列表时的增量搜索; 这使得可以通过输入一个项目名称的前几个字符来选择此项.

当使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 会接收到当前选择项目的文本. 但是, 如果控件含有 AltSubmit 属性, 输出变量将接收到项目的位置编号 (首个项目为 1, 第二个为 2, 依此类推).

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得当用户选择新项目时 MySubroutine 标签会自动运行.

使用 R 或 H 选项 来控制弹出列表的高度. 例如, 指定 R5 将使列表 5 行高. 如果同时省略 R 和 H 选项, 列表将自动扩展到用户桌面的有效高度 (但是, Windows XP 之前的操作系统默认将显示 3 行).

字段间的分隔符可以改变为管道符 (|) 外的其他符号. 例如 Gui +Delimiter`n 将改变分隔符为换行符而 Gui +DelimiterTab 将改变分隔符为制表符 (`t).

## ComboBox

描述: 和 DropDownList 一样, 除了还允许输入自由格式的文本作为列表中可选的项目.

    例如: Gui, Add, ComboBox, vColorChoice, Red|Green|Blue|Black|White

除了允许像上面的 DropDownList 的所有选项外, 选项 中还可以包含单词 Limit 来限制用户的输入在 ComboBox 编辑区域的可见宽度内. 此外, 指定单词 Simple 可以使 ComboBox 表现的像一个下方带有 ListBox 的 Edit 区域.

当使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 会接收到当前选择项目的文本.但是, 如果控件含有 AltSubmit 属性, 输出变量将接收到项目的位置编号 (首个项目为 1, 第二个为 2, 依此类推).在这两种情况下, 如果没有选择项目, 输出变量将被设置为 ComboBox 编辑区域的内容.

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得当用户选择新项目时 MySubroutine 标签会自动运行.

## ListBox

描述: 一个包含一个选择列表的较高的框, 列表中的项目可以被选择. 此时最后一个参数是管道分隔的选择列表例如 Choice1|Choice2|Choice3.

    例如: Gui, Add, ListBox, vColorChoice, Red|Green|Blue|Black|White

要在窗口初次出现时预选其中的某个或某些项目, 请在这些项目中的每个后面包含两个管道符 (如果要预选多个项目, 需要 Multi 选项). 或者, 在 选项 中包含单词 Choose 接着预选的单个项目编号. 例如, Choose5 将预选第五项. 要在控件创建后改变选择或添加/移除列表中的条目, 请使用 GuiControl.

当使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 会接收到当前选择项目的文本.但是, 如果控件含有 AltSubmit 属性, 输出变量接收的是项目的位置编号 (首个项目为 1, 第二个为 2, 依此类推).

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得当用户选择新项目时 MySubroutine 标签会自动运行.如果用户双击一个项目, 内置变量 A_GuiEvent 将包含字符串 DoubleClick 而不是 Normal. 此外, 变量 A_EventInfo 将包含被双击项目的位置 (首个项目为 1, 第二个为 2, 依此类推).

当添加大量项目到 ListBox 时, 在操作前使用 GuiControl, -Redraw, MyListBox 并且在操作后使用 GuiControl, +Redraw, MyListBox 也许会提高性能.

ListBox 选项:

Choose: 参见 上面.

Multi: 允许通过 shift-click 和 control-click 同时选择多个项目(如果想不使用 shift/control-click, 请指定 数字 8 代替单词 Multi). 此时 Gui Submit 保存管道分隔的项目字符串列表到控件的 输出变量. 但是, 如果 AltSubmit 选项存在, Gui Submit 保存管道分隔项目编号列表. 例如, 1|2|3 将表明开始的三个项目被选中. 要从字符串中提取个别项目, 请使用 parsing loop, 例如:

    Loop, parse, MyListBox, |
    {
        MsgBox Selection number %A_Index% is %A_LoopField%.
    }

字段间的分隔符可以改变为管道符 (|) 外的其他符号.例如 Gui +Delimiter`n 将改变分隔符为换行符而 Gui +DelimiterTab 将改变分隔符为制表符 (`t).

ReadOnly: 当项目被选择时避免它们被高亮显示 (但 Gui Submit 仍将保存选择的项目).

Sort: 按字母顺序自动排列列表的内容 (这也影响后面通过 GuiControl 添加的所有项目). Sort 选项同时启用了增量搜索, 这使得可以通过输入一个项目名称的前几个字符来选择此项.

Tn: 字母 T 可以用来设置制表位, 它可以把文本格式成列. 如果没有使用字母 T, 则每 32 个对话框单位设置一次制表位 (每个对话框单位的宽度由操作系统决定).如果仅使用一次字母 T, 每 n 个单元设置一次制表位横跨整个控件的宽度units across the entire width of the control.例如, "Gui, Add, ListBox, vMyListBox t64" 将设置制表位之间的距离为默认的两倍. 要自定义制表位, 请多次指定字母 T, 如后面的例子所示: Gui, Add, ListBox, vMyListBox t8 t16 t32 t64 t128. 在列表中每个绝对的列位置设置一个制表位, 制表位数目最大可达 50 个.

0x100: 在选项中包含 0x100 来打开 LBS_NOINTEGRALHEIGHT 样式. 此选项强制 ListBox 准确符合指定的高度而不是适应于避免部分行显示在底部的高度. 此选项也避免了其字体改变时 ListBox 缩小的情况.

要指定文本的行数 (或高度和宽度), 请参见 控件的位置和大小.

## ListView 和 TreeView

请参见单独的页面 ListView 和 TreeView.

## Hotkey

描述: 一个看起来像单行编辑控件的框, 但它接受用户按下的按键组合. 例如, 在英语键盘布局的系统中如果用户按下 Control+Alt+C, 此框将显示 "Ctrl + Alt + C".

    例如: Gui, Add, Hotkey, vChosenHotkey

当使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 接收到热键修饰符和按键名称, 它们兼容于 Hotkey 命令. 示例: ^!C, +!Home, +^Down, ^Numpad1, !NumpadEnd.如果控件中没有热键, 输出变量被置空. 注: 一些按键即使它们作为不同的名称获取也显示为相同的名称. 例如, ^Numpad7 和 ^NumpadHome 都可能显示为 Ctrl + Num 7.

默认情况下, 开始时控件中不含有热键. 要让控件含有一个默认的热键, 请在最后一个参数中指定热键修饰符和按键名称, 例如: Gui, Add, Hotkey, vChosenHotkey, ^!p
被支持的修饰符仅包括 ^ (Control), ! (Alt), 和 + (Shift). 请参见 按键列表 了解可用的按键名称.

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得用户改变热键时 MySubroutine 标签会自动运行. g-label 的每次运行都会保存热键到控件的 关联输出变量 (如果有的话). 注: 控件中存在一个不完整的热键时 g-label 也会运行. 例如, 如果用户按住 Control 键, g-label 会运行一次, 此时输出变量仅包含一个重音符 (^). 当用户按完热键后, g-label 再次运行, 此时输出变量包含完整的热键.

为了限制用户可以输入的热键类型, 请在选项中包含单词 Limit 接着下列数字的一个或多个的总和:

1: 阻止不含修饰符的键
2: 阻止修饰符仅含 Shift 的键
4: 阻止修饰符仅含 Control 的键
8: 阻止修饰符仅含 Alt 的键
16: 阻止修饰符含 Shift-Control 的键
32: 阻止修饰符含 Shift-Alt 的键
64: 不支持此值 (它不会正确执行).
128: 阻止修饰符含 Shift-Control-Alt 的键.

例如, Limit1 将阻止输入不含修饰符的热键例如字母和数字, 而 Limit15 则至少需要两个修饰键. 如果用户输入了一个被禁止的修饰键组合, 则自动使用 Control+Alt 组合代替.

Hotkey 控件对热键的支持有限. 例如, 它不支持鼠标/游戏杆热键或 Windows 键 (LWin 和 RWin). 解决的方法之一是提供一个或多个 checkbox 作为为用户启用额外的修饰键的工具例如 Windows 键.

## DateTime

描述: 一个看起来像单行编辑控件的框, 但它接受一个日期或时间. 同时提供一个下拉日历.

    例如: Gui, Add, DateTime, vMyDateTime, LongDate

最后一个参数可以是下列的其中一个:

(omitted): 省略时, 使用区域设置的短日期格式. 例如, 在某些区域设置中它看起来像这样: 6/1/2005

LongDate: 使用区域设置的长日期格式. 例如, 在某些区域设置中它看起来像这样: Wednesday, June 01, 2005

Time: 仅显示时间, 使用区域设置的时间格式. 尽管不显示日期, 它仍然存在于控件中并且与 YYYYMMDDHH24MISS 格式的时间一起被获取.

(custom format): 指定 日期和时间格式 的任意组合. 例如, M/d/yy HH:mm 格式显示的时间看起来像 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 用法

要预选今天外的其他日期, 请在 选项 中包含单词 Choose 接着一个 YYYYMMDD 格式的日期. 例如, Choose20050531 将预选 May 31, 2005 (和其他选项一样, 它也可以是一个变量例如 Choose%Var%). 要不选择日期/时间, 请指定 ChooseNone. ChooseNone 也在控件中创建一个复选框, 只要控件中不含日期此复选框则是未选中状态. 当控件中不含日期时, Gui Submit 和 GuiControlGet 命令将获取到一个空值 (空字符串).

日期的时间部分是可选的. 但是, 当进入或离开控件时它必须总是在日期之前. 时间部分的格式为 HH24MISS (小时数, 分钟数, 秒数), 其中 HH24 含义是用 24 小时格式表示; 例如, 09 为 9am 而 21 为 9pm. 因此, 一个完整的日期时间字符串的格式应为 YYYYMMDDHH24MISS.

当在 YYYYMMDDHH24MISS 格式中指定日期时, 可以仅包含主要部分. 其他任何省略的元素将使用下列默认值代替:
MM: 月份 01
DD: 日期 01
HH24: 小时 00
MI: 分钟 00
SS: 秒 00

在下拉日历中, 点击底部的今日字符串可以选择今天的日期. 此外, 还可以点击年份和月份名称, 这样可以方便的导航到一个新的月份或年份.

键盘导航: 使用上/下箭头键, Numpad+/Numpad-, 和 Home/End 来增加或减少控件的值. 使用左右箭头键可以在控件中的区域间移动. 在下拉日历中, 使用箭头键可以在日期间移动; 使用 PageUp/Down 可以在月份间往后/往前移动; 使用 Ctrl-PageUp/Down 可以在年份间移动; 使用 Home/End 可以选择当月的第一天/最后一天.

当使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 接收到所选择的 YYYYMMDDHH24MISS 格式的日期和时间. 日期和时间都存在不论控件中它们是否实际可见.

如果控件有 g-label, 每当用户改变日期或时间时此标签会运行. 每次运行时, 控件的 关联输出变量 (如果有的话) 会自动更新为当前选择的日期/时间.

Windows 95 和 NT4 需要和随 Internet Explorer 3.0 一起发布的 DLL 版本或更高的版本才能支持 DateTime 控件.

DateTime 选项:

Choose: 参见 上面.

Range: 限制可以选择的日期范围. 在单词 Range 后指定以 YYYYMMDD 格式表示的最小和最大的日期 (它们之间使用破折号连接). 例如, Range20050101-20050615 将限制可选择的日期为 2005 年开始的 5 个半月. 最小或最大的日期可以省略, 此时控件中的日期在这个方向上不受限制. 例如, Range20010101 将禁止选择早于 2001 年的日期而 Range-20091231 (由破折号前导) 将禁止选择迟于 2009 年的日期. 如果不含 Range 选项, 介于 1601 和 9999 年份之间的任何日期都可以选择. 无法对日期的时间部分进行限制.

Right: 使得下拉日历在控件的右边而不是左边拉下.

1: 在 选项 中指定数字 1 在控件的右边提供一个增减控件来修改日期和时间的值, 这会取代其他地方可用的下拉月历的修改.

2: 在 选项 中指定数字 2 在控件中提供一个复选框, 用户可以取消此复选框选择来表示没有选择日期/时间. 控件创建后无法改变此选项.

## MonthCal

描述: 一个又高又宽的控件, 其中以日历的格式显示一个月中的所有日子. 用户可以选择单个日期或日期范围.

    例如: Gui, Add, MonthCal, vMyCalendar

要预选今天外的其他日期, 请在最后一个参数中以 YYYYMMDD 格式指定它 (例如 20050531). 通过在两个日期间包含破折号可以预选一个日期范围 (例如 20050525-20050531).

通常最好忽略 MonthCal 的宽度 (W) 和高度 (H) 这样它自动调整大小来准确适应一个月份. 要垂直的显示多个月份, 请在 选项 中指定 R2 或更高. 要水平的显示多个月份, 请指定 W-2 (W 负 2) 或更高. 这些选项可以同时出现, 此时在两个方向上扩展.

点击控件底部今日字符串可以选择今天的日期. 此外, 还可以点击年份和月份的名称来方便的选择一个新的年份或月份.

与 DateTime 的下拉日历不同, 在 MonthCal 中一般不支持键盘导航.

当使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 会接收到所选择的 YYYYMMDD 格式表示的日期 (不含任何时间部分). 但是, 当 multi-select 选项存在时, 会得到以破折号连接的最小和最大日期 (例如 20050101-20050108). 在可以多选的日历中如果仅选择单个日期, 最小和最大日期会同时出现但它们是相同的. StringSplit 可以把日期分离开来. 例如, 后面的命令将把最小日期保存在 Date1 而最大日期保存在 Date2: StringSplit, Date, MyMonthCal, -

如果 MonthCal 含有 g-label, 其每次运行时会更新控件的 关联输出变量 (如果有的话) 为当前选择的日期或范围. 默认情况下, 仅当出现下列情况时标签才运行: 1) 用户改变了选择; 或 2) 每隔两分钟, 以防新的一天到来 (此行为是操作系统的怪癖). 但是, 如果控件的 选项 中含有单词 AltSubmit, g-label 会运行的更频繁, 此时内置变量 A_GuiEvent 当改变日期时包含单词 Normal, 点击一个日期时包含数字 1, 而当 MonthCal 释放 "鼠标捕获" 时包含数字 2. 例如, 如果用户双击一个新日期, 标签将运行五次: 其中一次为 Normal, 两次为 1, 还有两次为 2. 通过 计算两次数字 1 实例之间的时间间隔 可以检测双击.

当以 YYYYMMDD 格式指定日期时, MM 和/或 DD 部分可以省略, 此时它们默认为 1. 例如, 200205 被看作是 20020501, 而 2005 被看作是 20050101.

Windows 95 和 NT4 需要和随 Internet Explorer 3.0 一起发布的 DLL 版本或更高的版本才能支持 MonthCal 控件.

MonthCal 选项:

Multi: 多选. 允许用户使用 shift-click 或 click-drag 来选择一个连续的日期范围 (用户仍然可以选择单个日期). 可以明确指定此选项或在创建控件时通过指定一个选择范围的方法来使此选项自动生效. 例如: Gui, Add, MonthCal, vMyCal, 20050101-20050108. 控件创建后无法改变此选项.

Range: 限制日历中可以选择的时间范围. 在单词 Range 后指定以 YYYYMMDD 格式表示的最小和最大的日期 (它们之间使用破折号连接). 例如, Range20050101-20050615 将限制选区为 2005 年开始的 5 个半月.最小或最大的日期可以省略, 此时日历在这个方向上不受限制.例如, Range20010101 将禁止选择早于 2001 年的日期而 Range-20091231 (由破折号前导) 将禁止选择迟于 2009 年的日期.如果不含 Range 选项, 介于 1601 和 9999 年份之间的任何日期都可以选择.

4: 在 选项 中指定数字 4 可以在每行日期的左边显示周数 (1-52). Week 1 被定义为至少包含四天的第一周.

8: 在 选项 中指定数字 8 可以避免控件中当前日期往复循环.

16: 在 选项 中指定数字 16 可以禁止在控件的底部显示今天的日期.

## Slider

描述: 一个滑动栏, 用户可以沿着垂直或水平轨道移动. 在任务栏的托盘中的标准音量控件是滑动栏的一个例子.

    例如: Gui, Add, Slider, vMySlider, 50

请在最后一个参数中指定滑动栏的初始位置. 如果最后一个参数省略, 滑动栏初始位置为 0 或允许的范围中最接近 0 的数字.

用户可以通过下列方法滑动控件: 1) 用鼠标拖拉滑动栏; 2) 用鼠标在滑动栏的轨道区域点击; 3) 当焦点在控件上时转动鼠标滚轮; 或 4) 当焦点在控件上时按下下列按键: 方向键, 向上翻页键, 向下翻页键, Home, 和 End.

使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 会接收到滑动栏当前的数字位置. 每当控件的 g-label 运行时也将此位置保存到输出变量中.

如果滑动栏含有 g-label, 默认情况下仅当用户停止移动滑块时它才将运行 (例如在拖拉滑块后释放了鼠标按钮). 但是, 如果在控件的 选项 中指定了单词 AltSubmit, 所有滑动栏事件发生 g-label 都会运行而内置变量 A_GuiEvent 将包含下列数字或字符串的其中一个:

0: 用户按下了左方向键或上方向键.
1: 用户按下了右方向键或下方向键.
2: 用户按下了向上翻页键.
3: 用户按下了向下翻页键.
4: 用户用鼠标滚轮移动了滑块, 或已完成把滑块拖放到新位置的操作.
5: 用户正用鼠标拖动滑块即鼠标按钮当前是按下的.
6: 用户按下了 Home 键来移动滑块到左端或顶部.
7: 用户按下了 End 键来移动滑块到右端或底部.
Normal: 用户已经使用鼠标或键盘完成滑块移动. 注: 鼠标滚轮移动的例外情况是 (#4), 即使对于上面的数字事件其中之一 g-label 已经运行了一次, 对于 "normal" 事件它还会再次运行.

Slider 选项:

Buddy1 和 Buddy2: 最多可以指定两个现有的控件来自动定位到滑动条的两侧. Buddy1 显示在左边或顶部 (取决于是否存在 Vertical 选项). Buddy2 显示在右侧或底部. 在单词 Buddy1 或 Buddy2 后指定一个现有控件的 变量名称 . 例如, Buddy1MyTopText 将分配一个变量名称为 MyTopText 的控件. Windows 95 和 NT4 需要 Internet Explorer 3.0 或更高版本才能支持此选项.

Center: 滑块 (用户移动滑动栏) 两端将是钝的而不是指向其中一端.

Invert: 反转控件使得较低值被视为右边/底端而不是左边/顶端. 此选项常用来让垂直滑动栏在惯例的音量控件方向上移动. 注: 下面描述的 ToolTip 选项将不会服从反转因此不应在此时使用.

Left: 滑块 (用户移动滑动栏) 将指向上方而不是下方(原文中为顶端和底端,这里用上/下方是为了避免和滑动栏的顶端/底端混了). 但如果存在 Vertical 选项, 滑块将指向左边而不是右边.

Line: 指定当用户按下其中一个方向键时移动位置的数字. 在单词 Line 后指定移动位置的数字. 例如: Line2

NoTicks: 不显示轨道旁边的刻度标记.

Page: 指定当用户按下向上或向下翻页键时移动位置的数字. 在单词 Page 后指定移动位置的数字. 例如: Page10

Range: 指定 0 到 100 外的其他范围.在单词 Range 后指定最小值, 一个破折号和最大值.例如, Range1-1000 将允许选择一个介于 1 和 1000 之间的数字; Range-50-50 将允许一个介于 -50 和 50 之间的数字; 而 Range-10--5 将允许一个介于 -10 和 -5 之间的数字.

Thick: 指定滑块 (用户移动滑动栏) 的长度. 在单词 Thick 后指定以像素为单位的厚度 (例如 Thick30). 在 Windows XP 或更高版本的系统中要超过一定的厚度, 或者指定 Center 选项或者移除控件的主题或许是必要的 (通过在控件的选项中指定 -Theme 可以移除控件的主题).

TickInterval: 提供显示在轨道旁边指定间隔的刻度标记. 在单词 TickInterval 后指定间隔, 在间隔上显示另外的刻度标记 (如果省略间隔, 其默认值为 1). 例如, TickInterval10 将每隔 10 位置显示一个刻度标记.

ToolTip: 创建一个 tooltip 当用户拖动滑动栏时显示其数字位置. 要使 tooltip 不显示在默认位置, 请指定下列单词的其中一个代替: ToolTipLeft 或 ToolTipRight (对于水平滑动条); ToolTipTop 或 ToolTipBottom (对于垂直滑动条). Windows 95 和 NT4 需要 Internet Explorer 3.0 或更高版本才能支持此选项.

Vertical: 使控件上下滑动而不是左右滑动.

在控件创建后可以通过 GuiControl 改变上面的选项.

## Progress

描述: 一个双彩条, 通常用来指示一个操作接近完成的程度.

    例如: Gui, Add, Progress, w300 h20 cBlue vMyProgress

在最后一个参数中指定进度条的初始位置 (如果省略, 进度条初始位置为 0 或允许的范围中最接近 0 的数字). 要在以后改变进度条的位置, 请参照这些例子, 它们都是对 关联变量名 为 MyProgress 的进度条进行操作:

    GuiControl,, MyProgress, +20  ; Increase the current position by 20.
    GuiControl,, MyProgress, 50  ; Set the current position to 50.

对于水平进度条, 进度条的厚度等于控件的高度. 对于垂直进度条它等于控件的宽度.

Progress 选项:

Cn: 改变进度条的颜色. 指定 n 为 16 种 HTML 基础颜色 之一或 6 位的 RGB 颜色值. 例如: cRed, cFFFF33, cDefault. 如果从没有使用过 C 选项 (或指定 cDefault), 将使用系统默认的进度条颜色.

BackgroundN: 改变进度条的背景颜色. 指定 n 为 16 种 HTML 基础颜色 之一或 6 位的 RGB 颜色值.例如: BackgroundGreen, BackgroundFFFF33, BackgroundDefault. 如果从没有使用过 Background 选项 (或指定 BackgroundDefault), 将使用窗口的或进度条后 标签控件 的颜色作为背景颜色.

Range: 指定 0 到 100 外的其他范围.在单词 Range 后指定最小值, 一个破折号和最大值.例如, Range0-1000 将允许一个介于 0 和 1000 之间的数字; Range-50-50 将允许介于 -50 和 50 之间的数字; 而 Range-10--5 将允许介于 -10 和 -5 之间的数字. 在 Windows 95 和 NT4 系统中, 只有安装了Internet Explorer 3.0 或更高版本后, 含有负数或超过 65535 数字的区间才能正确的执行.

-Smooth (负 Smooth): 显示一段段的长度而不是一个平滑连续的进度条. 指定 -Smooth 也是在 Windows XP 或更高版本的系统中显示含主题的进度条的要求之一. 其他的要求是没有使用自定义的颜色即 C 和 Background 选项都省略了. Windows 95 和 NT4 需要 Internet Explorer 3.0 或更高版本才能支持此选项.

Vertical: 使进度条垂直上升或下降而不是水平移动.Windows 95 和 NT4 需要 Internet Explorer 3.0 或更高版本才能支持此选项.

在控件创建后可以通过 GuiControl 改变上面的选项.

## GroupBox

描述: 一个矩形的框, 常用来封装一组相关的控件. 此时最后一个参数为组合框的标题, 其(如果存在)显示在组合框的左上角.

    例如: Gui, Add, GroupBox, w400 h300, Geographic Criteria

默认情况下 GroupBox 的标题可以只有一行文本. 在选项中指定 Wrap 可以覆盖此特性.

要指定控件中的行数 (或高度和宽度), 请参见 控件的位置和大小.

## Tab2

描述: 一个大的包含多个页面的控件, 其中的每个包含其他控件. 从此以后, 这些页面被称为 "标签".

Tab2 vs. Tab: v1.0.47.05 添加了 "Tab2" 控件, 其中修复了原 "Tab" 控件中很少出现的重绘问题 (例如通过点击 GUI 窗口中控件的某个部分来激活窗口时, 如滚动条, 可能无法正确重绘). 为了向后兼容保留了原 Tab 控件, 因为 Tab2 在 tab 键导航顺序中把其标签页控件放在它所包含的控件之后. 新脚本应尽可能使用 Tab2.

    例如: Gui, Add, Tab2,, General|View|Appearance|Settings

上述的最后一个参数是管道分隔的标签名称列表. 要在窗口初次出现时预选其中的某个标签, 请在此项后包含两个管道符.或者, 在 选项 中包含单词 Choose 接着预选的项编号.例如, Choose5 将预选第五个标签 (和其他选项一样, 它也可以是一个变量 Choose%Var%). 要在控件创建后改变选择的标签, 添加标签或移除标签, 请使用 GuiControl.

创建一个 Tab 控件后, 随后添加的控件自动属于其首个标签. 这在任何时候都可以改变, 请参照这些例子:

    Gui, Tab  ; Future controls are not part of any tab control.
    Gui, Tab, 3  ; Future controls are owned by the third tab of the current tab control.
    Gui, Tab, 3, 2  ; Future controls are owned by the third tab of the second tab control.
    Gui, Tab, Name  ; Future controls are owned by the tab whose name starts with Name (not case sensitive).
    Gui, Tab, Name,, Exact  ; Same as above but requires exact match (case sensitive too).

使用上面的每一个例子分配控件到一个还不存在的标签页或标签控件也是可能的 (除了使用 Name 方法的情况). 但在此情况下, 不支持下面描述的相对位置选项.

Positioning: 当一个标签控件的每个标签页接收到其首个子控件, 此子控件在下列情况下将有特殊的默认位置: 1) X 和 Y 坐标同时省略, 此时首个子控件放在标签控件内部的左上角 (拥有标准的 margin), 而首个子控件后的其他子控件放在前面控件的下面; 2) 指定了 X+n 和/或 Y+n 位置选项, 此时子控件被放在相对于标签控件内部的左上角的位置. 例如, 指定 "x+10 y+10" 将控件放置在左上角往右往下各 10 个像素的位置.

子控件不一定要在它们 Tab 控件边界的内部: 每当选择或取消选择它们的标签页时它们仍会被隐藏和显示. 此行为特别适合于下面描述的 "buttons" 样式.

使用 Gui Submit 命令后, 控件的 关联输出变量 (如果有的话) 会接收到当前选择的标签页名称. 但是, 如果控件含有 AltSubmit 属性, 输出变量将接收到标签页位置编号 (首个标签页为 1, 第二个为 2, 等).

一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得当用户切换到一个新标签页时 MySubroutine 标签会自动运行. 如果标签控件同时有 g-label 和 输出变量, 每当用户切换到一个新标签页, 输出变量将被设置为原来选择的标签页名称 (在含有 AltSubmit 属性时则为编号).

键盘导航: 用户按下 Control-PageDown/PageUp 可以在标签控件的页面间导航; 如果键盘焦点在不属于标签控件的控件上, 将导航到窗口的首个标签控件. 也可以使用 Control-Tab 和 Control-Shift-Tab, 除非当前焦点控件在多行编辑控件此时它们不起作用.

每个窗口可能不能含有超过 255 个的标签控件.每个标签控件可能不能含有超过 256 个标签 (页). 此外, 一个标签控件中可能不能包含其他的标签控件.

Tab 选项:

Choose: 参见 上面.

-Background (负号接着单词 background): 取消 窗口自定义背景色 而使用系统默认的 Tab 控件颜色. 指定 +Theme -Background 使得 Tab 控件适应于当前桌面主题. 然而, 在这样标签控件内的大多数控件类型将看起来很奇怪因为它们的背景颜色不匹配标签控件的背景颜色. 对于某些控件类型这种情况通过在它们的选项中添加 BackgroundTrans 可以修复 (例如 Text).

Buttons: 在控件的顶部创建一系列按钮而不是一系列标签页 (此时在默认下将没有边界因为显示的区域实际并不包含控件).

Left/Right/Bottom: 指定这些单词的其中一个让标签页在左边, 右边或底部而不是顶部. 参见 TCS_VERTICAL 了解对于 Left 和 Right 的限制.

-Wrap: 禁止标签页占用多行 (此时为了适应于过多的标签页, 会显示箭头按钮以允许用户滑动来查看更多标签页).

要指定控件中文本的行数 (或高度和宽度), 请参见 控件的位置和大小.

Icons in Tabs: 通过 SendMessage 可以在每个标签的名称/文本旁边显示一个图标. 演示的例子参见论坛主题 Icons in tabs.

## StatusBar [v1.0.44+]

描述: 附加到窗口底部的一行文本和/或图标, 通常用来报告状态的变化.

    ; Example:
    Gui, Add, StatusBar,, Bar's starting text (omit to start off empty).
    SB_SetText("There are " . RowCount . " rows selected.")

状态栏最简单的用法是每当应该报告给用户的一些状态改变时调用 SB_SetText(). 要报告多片的信息, 通过 SB_SetParts() 把状态栏分成多段. 要在状态栏中显示图标, 请调用 SB_SetIcon().

下列所有的 StatusBar 函数操作于当前线程的 默认 GUI 窗口 (这可以通过 Gui, 2:Default 改变). 如果默认窗口不存在或不含有状态栏, 所有 SB 函数返回 0 来表明此问题.

SB_SetText(NewText [, PartNumber, Style]): 在状态栏指定部分显示 NewText. 如果 PartNumber 省略, 默认值为 1. 否则, 请指定一个介于 1 和 256 之间的整数.如果 Style 省略, 默认值为 0, 此时使用让状态栏那部分看起来凹陷的传统边界. 否则, 指定 1 则不含边界, 而指定 2 则含有让状态栏看起来是高出的边界. 最后, 在 NewText 中任意地方最多可以使用两个制表符 (`t): 在首个制表符右边的任何内容显示在此部分中心, 而第二个制表符右边的内容显示为右对齐. SB_SetText() 成功时返回 1 而失败返回 0.

SB_SetParts([Width1, Width2, ... Width255]): 根据指定的宽度 (单位为像素) 把状态栏分成多个部分. 如果省略所有参数, 状态栏恢复为单个很长的唯一一个部分. 否则, 指定除了最后一部分外其余每部分的宽度 (最后一部分将填充状态栏的剩余宽度). 例如, SB_SetParts(50, 50) 将创建三个部分: 前两个部分的宽度都为 50 而最后一部分占据所有剩余的宽度. 注: SB_SetParts() "删除" 的任何部分下次显示时初始不含文本 (而且, 其中的图标被自动销毁). 执行成功时, SB_SetParts() 返回一个非零值 (状态栏的 HWND). 失败时返回 0.

SB_SetIcon(Filename [, IconNumber, PartNumber]): 在指定部分的文本左边显示一个小图标 (如果 PartNumber 省略, 默认值为 1). Filename 为图标 (.ICO), 光标 (.CUR), 或动画光标 (.ANI) 文件的名称 (动画光标在状态栏上实际将不会动). 图标的其他来源包括下列文件类型: EXE, DLL, CPL, SCR, 和包含图标资源的其他类型. 要使用文件中的图标组而不是首个图标, 请在 IconNumber 中指定其编号. 例如, SB_SetIcon("Shell32.dll", 2) 将使用第二个图标组中的默认图标. SB_SetIcon() 成功时返回图标的 HICON 而失败返回 0. HICON 是一个可以被大多数脚本安全忽略的系统资源因为当状态栏所在窗口销毁时它被自动销毁. 同样, 当 SB_SetIcon() 用一个新的图标替换旧图标时旧图标被销毁. 这种情况可以使用以下方法避免:

    Gui +LastFound
    SendMessage, 0x40F, part_number - 1, my_hIcon, msctls_statusbar321  ; 0x40F is SB_SETICON.

SB_SetProgress(): 创建和控制状态栏里的进度条. 此函数可以从 www.autohotkey.com/forum/topic37754.html 获取.

G-Label Notifications: 一个 g-label 例如 gMySubroutine 可以使用在此控件选项中. 这使得当用户点击状态栏时 MySubroutine 标签自动运行. 此子程序中可参考使用内置变量 A_Gui 和 A_GuiControl. 更重要的是, 它可以参考 A_GuiEvent, 其包含下列字符串的其中一个 (考虑到和未来版本的兼容性, 一个脚本不应假定这些字符串是唯一可能的值):

- Normal: 用户左键单击状态栏. 变量 A_EventInfo 包含目标部分编号 (然而, 如果用户点击状态栏右边靠近大小调整手柄的地方时目标部分编号可能是一个很大的整数).
- RightClick: 用户右键单击状态栏. 变量 A_EventInfo 包含目标部分编号. 注: 如果状态栏含有 g-label 将不会调用 GuiContextMenu. 此外, 当脚本需要知道用户点击的是哪个部分编号 (A_EventInfo) 时应该使用 g-label 的 RightClick 事件代替 GuiContextMenu.
- DoubleClick: 用户双击状态栏. 变量 A_EventInfo 包含目标部分编号.
- R: 用户 右键双击状态栏. 变量 A_EventInfo 包含目标部分编号.

Font and Color: 尽管字体大小, 外观和样式可以通过 "Gui Font" 设置 (像普通控件一样), 文本颜色不能改变. 此外, 不服从 "Gui Color" 的颜色设置; 代替的方法是, 状态栏的背景颜色可以通过在 选项 中指定单词 Background 接着一个颜色名称 (参见 颜色图表) 或 RGB 值 (0x 前缀可以省略) 来改变. 例如: BackgroundSilver, BackgroundFFDD99, BackgroundDefault.

Hiding the StatusBar: 创建时可以通过 Gui, Add, StatusBar, Hidden vMyStatusBar 隐藏状态栏. 要在创建后某个时候隐藏它, 请使用 GuiControl, Hide, MyStatusBar. 要显示, 请使用 GuiControl, Show, MyStatusBar. 注: 隐藏状态栏不会降低窗口的高度. 如果期望这样, 一个简便的方法是 Gui, Show, AutoSize.

Styles (很少使用): 参见 状态栏样式表.

已知的限制: 1) 如果某个控件的位置和状态栏重叠, 那么它有可能会被绘制在状态栏的上方. 避免这种情况的一个方法是通过 GuiSize label 动态的缩小这样的控件. 2) 每个窗口只允许有一个状态栏控件.

Example: TreeView 页面 底部演示了一个多部分的状态栏.

## Internet Explorer Control

MSIE 浏览器控件可以通过 DllCall 嵌入到 GUI 窗口中. 控件中可以显示网页或其他浏览器兼容的内容. 演示的例子参见 www.autohotkey.com/wiki/index.php?title=Internet_Explorer_Control

## 相关

ListView, TreeView, Gui, GuiControl, GuiControlGet, Menu