# Progress / SplashImage

创建或更新含有进度条或图像的窗口.

过时的: 不推荐在新脚本中使用这些命令. 请使用 Gui 命令代替.

    SplashImage, Off
    SplashImage , ImageFile, Options, SubText, MainText, WinTitle, FontName

    Progress, Off
    Progress, ProgressParam1 , SubText, MainText, WinTitle, FontName

## 参数

ImageFile

  如果此参数为单词 OFF, 则销毁窗口. 如果它为单词 SHOW, 则显示当前隐藏的窗口.

  否则, 此参数为要显示的 BMP, GIF 或 JPG 图像的文件名(要显示其他格式的图像例如 PNG, TIF 以及 ICO, 请考虑使用 Gui 命令创建包含图片控件的窗口).

  [AHK_L 59+]: 任何 Gui 支持的图像格式都可用于 SplashImage.

  如果未指定绝对路径, 则假定 ImageFile 在 %A_WorkingDir% 中. 如果 ImageFile 和 Options 都为空且窗口已经存在, 则窗口中的图像保持不变, 但其中的文本将更新为由 SubText, MainText 以及 WinTitle 提供的新字符串.

  对于新创建的窗口, 如果 ImageFile 为空或加载图片时出现问题, 那么显示的窗口中将不含图片.

  [v1.1.23+]: bitmap(位图) 或 icon(图标) 句柄可替代文件名. 例如, `HBITMAP:%handle%`.

ProgressParam1

  如果进度条窗口已经存在: 如果 Param1 为单词 OFF, 则销毁进度条窗口. 如果 Param1 为单词 SHOW, 则显示当前隐藏的窗口.

  否则, 如果 Param1 是一个数字, 则更新进度条的位置为这个值. 如果 Param1 为空, 则其进度条位置保持不变, 但其中的文本将更新为由 SubText, MainText 以及 WinTitle 提供的新字符串. 在这两个形式中, 如果进度条窗口已经不存在, 则使用所有选项的默认值进行创建.

  如果进度条窗口不存在: 创建新的进度条窗口(替换任何旧的), 此时 Param1 是由下表中零个或多个选项组成的字符串.

Options(选项)

  此参数是由较远的下面列表中零个或多个选项组成的字符串.

SubText

  显示在图像或进度条下面的文本. 尽管会自动换行, 但如果要明确开始新行, 请使用(`n). 要设置现有窗口的文本为空, 请指定 %A_Space%. 为了自动计算窗口的高度, 可以像下面的 MainText 那样保留空行.

MainText

  显示在图像或进度条上面的文本(其字体为半粗体). 尽管会自动换行, 但如果要明确开始新行, 请使用(`n).

  如果为空或省略, 则窗口中不会预留空间给 MainText. 要为以后添加内容预留单行空间, 或设置现有窗口的文本为空, 请指定 %A_Space%. 要预留多行的空间, 请添加一个或多个换行符(`n).

  当设置好 MainText 的控件区域的高度后, 这个高度只有重新创建窗口才能改变.

WinTitle

  窗口标题. 如果省略并且正新建窗口, 则使用脚本名称(不带路径) 作为窗口标题. 如果指定了 B(无边框) 选项, 则会看不见窗口的标题栏, 但是在诸如 WinMove 的命令中仍可以通过这个标题引用此窗口.

FontName

  用于 MainText 和 SubText 中文本的字体名称. 字体表中列出了 Windows 系统各种版本中包含的字体. 如果未指定或无法找到指定的字体, 则使用系统默认的 GUI 字体.

  关于如何改变字体的大小, 粗细和颜色, 请参阅下面的选项部分.

## 窗口的大小, 位置和行为

A: 窗口将 不会 置顶.

B: 无边框: 窗口将不含有边框和标题栏. 要含有边框而没有标题栏, 请使用 B1 添加薄边框或 B2 添加对话框样式的边框.

M: 用户可以移动窗口(除非不含有边框). 此外, 要让窗口大小可以调整(通过拖动边框的方法), 请指定 M1. 此外, 要让窗口的标题栏中包含系统菜单和最小化/最大化/关闭按钮的集合, 请指定 M2.

Pn: 对于进度条窗口, 请指定 n 为进度条的初始位置(默认值为 0 或者是允许的范围内最接近 0 的数字). 以后要改变进度条的位置, 请参照此例: `Progress, 50`.

Rx-y: 对于进度条窗口, 请指定 x-y 为进度条的数值范围(如果没有使用 R 选项, 则默认为 0-100). 例如, `R0-1000` 将允许一个介于 0 和 1000 之间的数字; `R-50-50` 将允许介于 -50 和 50 之间的数字; 而 `R-10--5` 将允许介于 -10 和 -5 之间的数字.

T: 给窗口增加任务栏按钮并使窗口变成非从属的/独立的. 一般情况下, 从属于脚本主窗口的窗口是没有任务栏按钮的. 此设置也避免了 GUI 窗口使用 Gui +OwnDialogs 的方法获取弹出窗口或进度条窗口的所有权关系.

Hn: 指定 n 为窗口工作区的高度(这是窗口中不包括标题栏和边框的区域). 如果未指定, 那么将根据图像/进度条和文本的高度 自动 计算窗口的高度.

Wn: 指定 n 为窗口工作区的宽度. 如果未指定, 则根据 SplashImage(如果含有图像) 自动计算窗口的宽度. 否则, 它默认为 300.

Xn: 指定 n 为窗口左上角的 x 坐标. 如果未指定, 则窗口在屏幕上将水平居中.

Yn: 指定 n 为窗口左上角的 y 坐标. 如果未指定, 则窗口在屏幕上将垂直居中.

Hide: 窗口初始为隐藏状态. 以后要显示时请使用 `Progress Show` 或 `SplashImage Show`.

## 窗口中的组件布局

Cxy: 居中: 如果未使用此选项, 则 SubText 和 MainText 都将在窗口内居中显示. 指定 x 为 0 来让 SubText 向左对齐. 指定为 1 来让它居中. 在 y 中指定相同的值效果是一样的, 不过其应用于 MainText(y 可以省略). 例如: `c10`.

ZHn: 组件的高度: 对于进度条窗口, 指定 n 为进度条的厚度(默认为 20). 对于 SplashImage 窗口, 指定 n 为图像的高度. 指定 -1 来让高度自适应于在 ZWn 中指定的宽度(即 "保持高宽比"). 如果未指定, 则使用图像的实际高度. 在这两种情况中, 指定 0 来不显示整个组件, 此时允许窗口仅显示自定义字体样式, 大小和颜色的文本.

ZWn: 组件的宽度(仅适用于 SplashImage): 指定 n 为图像的宽度. 指定 -1 来让宽度自适应于在 ZHn 中指定的高度(即 "保持高宽比"). 如果未指定, 则使用图像的实际宽度.

ZXn: 指定 n 为窗口左/右边缘的空白大小总和. 对于不含文本的 SplashImage 窗口默认大小为 0, 其他情况默认大小为 10.

ZYn: 指定 n 为窗口顶部和底部以及每个控件间在垂直方向上空白空间的大小总和. 对于不含文本的 SplashImage 窗口默认大小为 0, 其他情况默认为 5.

注: 要创建垂直的进度条或进行更灵活地窗口布局, 请使用 Gui 命令, 例如:

    Gui, Add, Progress, Vertical vMyProgress
    Gui, Show
    return
    ; ... 后面...
    GuiControl,, MyProgress, +10  ; 把进度条向前移动 10%. 省略 + 来设置绝对的位置.

## 字体大小和粗细

FMn: 指定 n 为 MainText 中的字体大小. 默认为 0, 此时在大多数系统中会使用 10 作为字体大小. 此默认值不会影响在控制面板 > 显示设置中系统选择的字体大小.

FSn: 指定 n 为 SubText 中的字体大小. 默认为 0, 此时在大多数系统中会使用 8 作为字体大小.

WMn: 指定 n 为 MainText 中的字体粗细. 字体粗细应该介于 1 和 1000 之间. 如果未指定, 则使用 600(半粗体).

WSn: 指定 n 为 SubText 中的字体粗细. 字体粗细应该介于 1 和 1000 之间(700 一般被认为是 "粗体"). 如果未指定, 则使用 400(正常字体).

## 组件颜色

颜色值可以是下表中的其中一个名称 或 6 位的十六进制 RGB 值. 例如, 指定 `cw1A00FF` 将设置窗口背景颜色中红色通道为 1A, 绿色通道为 00, 而蓝色通道为 FF.

如果在每个颜色选项后面还跟着更多的选项, 则请在颜色选项后添加空格. 例如: `cbRed ct900000 cwBlue`.

CBn: 进度条的颜色: 指定 n 为 16 种 HTML 基础颜色之一或 6 位的 RGB 颜色值. 如果未指定, 则使用系统默认的进度条颜色. 指定单词 Default 来返回到系统的默认进度栏颜色.

CTn: 文本颜色: 指定 n 为 16 种 HTML 基础颜色之一或 6 位的 RGB 颜色值. 如果未指定, 则使用系统默认的文本颜色(通常为黑色). 指定单词 Default 来返回到系统默认的文本颜色.

CWn: 窗口颜色(背景): 指定 n 为 16 种 HTML 基础颜色之一或 6 位的 RGB 颜色值. 如果未指定, 则使用按钮外观的系统颜色(以后指定单词 Default 来返回到此颜色). 要让窗口的背景透明, 请使用 WinSet TransColor.

| 颜色名称 | RGB 值
--- | --- | ---
| Black | 000000
| Silver | C0C0C0
| Gray | 808080
| White | FFFFFF
| Maroon | 800000
| Red | FF0000
| Purple | 800080
| Fuchsia | FF00FF
| Green | 008000
| Lime | 00FF00
| Olive | 808000
| Yellow | FFFF00
| Navy | 000080
| Blue | 0000FF
| Teal | 008080
| Aqua | 00FFFF

## 备注

如果首个参数为单词 OFF, 则销毁窗口.

每个脚本可以显示多达 10 个进度窗口和 10 个 SplashImage 窗口. 创建每个窗口时都会给它分配一个编号. 如果未指定, 则此编号为 1(对于首个窗口). 否则, 请在首个参数前加上窗口编号和冒号. 例如, 带有 `2:Off` 参数的 Progress 命令将关闭编号为 2 的进度条窗口, `2:75` 将设置其进度条到 75% 的位置, `2:` 将改变其一个或多个文本区域, 而 `2:B` 将创建新的无边界进角度条窗口. 同样地, 带有 `2:Off` 参数的 SplashImage 命令将关闭编号为 2 的 SplashImage 窗口, `2:` 将改变其一个或多个文本区域, 而 `2:C:\My Images\Picture1.jpg` 将创建新的编号为 2 的 SplashImage 窗口.

在创建时, 大于桌面的窗口会被自动缩小以适应桌面.

指定 SubText 和 MainText 为空且包含下列选项: `b zx0 zy0`, 可以显示单独的进度条. 加上 B 选项后, 用相同的方法可以显示单独的图像.

在 Windows XP 或更高版本中, 如果当前使用的不是经典主题, 则进度条的内部可能显示为一段段而不是平滑连续的条. 要避免这种情况, 请明确指定进度条颜色, 例如 cbBlue.

除非特别注明, 否则在需要数字的选项字母中使用十进制数(而不是十六进制数).

像 WinSet 和 WinMove 这样的命令可以改变现有窗口的属性而不必重新创建窗口.

GUI 窗口可以使用 Gui +OwnDialogs 的方法获取进度条窗口或弹出窗口的所有权. 这会使得弹出窗口或进度条窗口总是保持在其父窗口的前面. 此外, 当其从属的 GUI 窗口销毁时, 进度条窗口或弹出窗口会自动销毁.

## 相关

GUI, SplashTextOn, ToolTip

## 示例

创建一个无边框的进度窗口, 并将进度条的位置设置为 50%.

    Progress, b w200, My SubText, My MainText, My Title
    Progress, 50 ; 设置进度条的位置为 50%.
    Sleep, 4000
    Progress, Off

创建窗口, 只显示一些 18 磅的 Courier 文本.

    Progress, m2 b fs18 zh0, This is the Text.`nThis is a 2nd line., , , Courier New

创建简单的 SplashImage 窗口.

    SplashImage, C:\My Pictures\Company Logo.gif

创建无边框的 SplashImage 窗口, 在其中图像的下面显示一些大文本.

    SplashImage, C:\My Pictures\Company Logo.gif, b fs18, This is our company logo.
    Sleep, 4000
    SplashImage, Off

演示了如何把进度条窗口覆盖在 SplashImage 的上面来生成专业外观的安装程序屏幕. Gui 示例 #7 类似这个, 但它的优点是只使用了一个窗口并且可以对窗口布局进行更好的控制.

    if FileExist("C:\WINDOWS\system32\ntimage.gif")
        SplashImage, %A_WinDir%\system32\ntimage.gif, A,,, Installation
    Loop, %A_WinDir%\system32\*.*
    {
        Progress, %A_index%, %A_LoopFileName%, Installing..., Draft Installation
        Sleep, 50
        if (A_Index = 100)
            break
    }

dftg