Inno Setup 消息参数

Slo*_*ner 4 inno-setup

在“消息”文件下的 Inno Setup 帮助中,我发现了这一点:

某些消息采用诸如 %1 和 %2 之类的参数。您可以重新排列参数的顺序(即,将 %2 移动到 %1 之前),也可以根据需要复制参数(即“%1 ... %1 %2”)。在带有参数的消息上,使用两个连续的“%”字符嵌入一个“%”。"%n" 创建一个换行符。

在“自定义消息”下:

消息可以采用参数,从 %1 到 %9。您可以重新排列参数的顺序(即,将 %2 移动到 %1 之前),也可以根据需要复制参数(即“%1 ... %1 %2”)。在带有参数的消息上,使用两个连续的“%”字符嵌入一个“%”。"%n" 创建一个换行符。

但是......对于我的生活,我不知道如何使用这些......到目前为止我已经看到 %1 工作(转换为应用程序名称)但是当我将 %1 更改为 %2(最多 - % 9) 它只是显示为 %2, %3, %4 等等....

我只是好奇 - 我如何使用这些参数,它们被分配在哪里?

干杯,

TLa*_*ama 5

tl;博士

对于该[Messages]部分,它们是硬编码和特定于消息的,可能没有记录。因为[CustomMessages]它在你身上。


1. [Messages] 部分的参数是什么?

对于该[Messages]部分,这很难回答,因为它在源代码中是硬编码的,并且特定于每条消息,因此它是一种移动目标。如果您在源 *.pas 文件中搜索FmtSetupMessageFmtSetupMessage1字符串,则可以找到它们。这些是格式化消息以及传递参数的地方。我不知道是否有这方面的文档,所以我会继续搜索源代码。这里有一些关于要搜索的功能。

1.1 FmtSetupMessage 函数

第一个函数FmtSetupMessage可以接受多个参数,它的调用可以这样读:

FmtSetupMessage(msgSomeMessageId, ['Argument 1', 'Argument 2'])
Run Code Online (Sandbox Code Playgroud)

[]括号中的(逗号分隔的)常量数组是order 中的参数%1..%n。如果msgSomeMessageId消息有翻译,请说:

Lorem %2 ipsum dolor sit %1 amet.
Run Code Online (Sandbox Code Playgroud)

然后使用上面的示例调用将被格式化为:

Lorem Argument 2 ipsum dolor sit Argument 1 amet.
Run Code Online (Sandbox Code Playgroud)

真正的 Inno Setup 源代码中每个参数的含义应该很容易找到,但至少需要 Pascal 语言的基本阅读能力。

1.2 FmtSetupMessage1 函数

FmtSetupMessage1阅读,因为它仅采用一个参数,则是更容易%1的说法:

FmtSetupMessage1(msgSomeMessageId, 'Argument')
Run Code Online (Sandbox Code Playgroud)

因此,由FmtSetupMessage1函数格式化的消息很可能只包含%1参数。


2. [CustomMessages] 部分的参数是什么?

[CustomMessages]节的原则是提供一种定义自定义消息的方法,其中包括您传递给它们以格式化输出字符串的参数。因此,您将通过以下任何一种方式传递什么完全取决于您。

2.1 脚本部分中的 {cm:...} 常量

在脚本部分,您可以使用{cm:...}常量,您可以在其中将参数作为消息名称后的逗号分隔列表传递。例如这个:

[CustomMessages]
MyMessage=Lorem %2 ipsum dolor sit %1 amet.

[Run]
;                                              ? Name    ? %1       ? %2
Filename: "{app}\MyApp.exe"; Description: "{cm:MyMessage,Argument 1,Argument 2}"
Run Code Online (Sandbox Code Playgroud)

将导致此格式化消息:

Lorem Argument 2 ipsum dolor sit Argument 1 amet.
Run Code Online (Sandbox Code Playgroud)

由于{cm:...}常量格式比这更复杂,我会推荐你​​帮助了解详细信息。

2.2 [Code]部分的FmtMessage函数

在该[Code]部分中,您可以使用该FmtMessage函数来格式化具有这种参数支持的消息。要获取自定义消息,您可以使用该CustomMessage功能。这是一个与上述结果相同的简短示例:

[CustomMessages]
MyMessage=Lorem %2 ipsum dolor sit %1 amet.

[Code]
procedure InitializeWizard;
var
  S: string;
begin
  //                             ? Name         ? %1          ? %2
  S := FmtMessage(CustomMessage('MyMessage'), ['Argument 1', 'Argument 2']);
  MsgBox(S, mbInformation, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)