# Progress / SplashImage

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

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 命令创建一个包含图片控件的窗体). 如果没有指定绝对路径, 则假定 ImageFile 在 %A_WorkingDir% 中. 如果 ImageFile 和 Options 都为空并且窗体已经存在, 窗体中的图像保持不变,但是其中的文本将更新为由 SubText, MainText, 和 WinTitle 提供的新字符串. 对于新创建的窗体, 如果 ImageFile 为空或装载图片时出现问题, 显示的窗体将不含图片.
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 字体. 关于如何改变字体的大小, 粗细和颜色, 请参看下面的选项段.

## Window 的大小, 位置, 和 行为

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 之间的数字. 在 Windows 95 和 NT4 系统中, 只有安装了Internet Explorer 3.0 或更高版本后, 含有负数或超过 65535 数字的区间才能正确的执行.

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
    ; ... later...
    GuiControl,, MyProgress, +10  ; Move the bar upward by 10 percent. Omit the + to set an absolute position.

## 字体的大小和粗细

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 可以返回到此颜色). 在 Windows 2000/XP 或更高版本系统中要使窗口背景透明, 请使用 WinSet TransColor.

颜色名称和相应的RGB值
| Black = 000000 |  | Green = 008000
| Silver = C0C0C0 |  | Lime = 00FF00
| Gray = 808080 |  | Olive = 808000
| White = FFFFFF |  | Yellow = FFFF00
| Maroon = 800000 |  | Navy = 000080
| Red = FF0000 |  | Blue = 0000FF
| Purple = 800080 |  | Teal = 008080
| Fuchsia = FF00FF |  | 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 and WinMove 这样的命令可以改变一个现有窗口的属性而不必重新创建窗口.

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

## 相关

GUI, SplashTextOn, ToolTip

## 示例

    Progress, b w200, My SubText, My MainText, My Title
    Progress, 50 ; Set the position of the bar to 50%.
    Sleep, 4000
    Progress, Off

    ; Create a window just to display some 18-point Courier text:
    Progress, m2 b fs18 zh0, This is the Text.`nThis is a 2nd line., , , Courier New

    ; Create a simple SplashImage window:
    SplashImage, C:\My Pictures\Company Logo.gif

    ; Create a borderless SplashImage window with some large text beneath the image:
    SplashImage, C:\My Pictures\Company Logo.gif, b fs18, This is our company logo.
    Sleep, 4000
    SplashImage, Off

    ; Here is a working example that demonstrates how a Progress window can be
    ; overlayed on a SplashImage to make a professional looking Installer screen:
    IfExist, 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
    }
    ; There is similar example at the bottom of the GUI page. Its advantage is that it uses only a single
    ; window and it gives you more control over window layout.