tl;博士
对于[Messages] 部分,它们是硬编码的并且是特定于消息的,可能没有记录。 [CustomMessages] 由您决定。
1。 [Messages] 部分的参数是什么?
对于[Messages] 部分,这很难回答,因为它在源中是硬编码的,并且针对每条消息都是特定的,因此它是一种移动目标。如果您在源 *.pas 文件中搜索 FmtSetupMessage 和 FmtSetupMessage1 字符串,您可以找到它们。这些是消息被格式化和传递参数的地方。我不知道是否有这方面的文档,所以我会继续搜索源代码。这里有一些关于要搜索的功能。
1.1 FmtSetupMessage函数
第一个函数FmtSetupMessage 可以接受多个参数,它的调用可以这样解读:
FmtSetupMessage(msgSomeMessageId, ['Argument 1', 'Argument 2'])
由[] 括号括起来的(逗号分隔的)常量数组是按%1..%n 顺序排列的参数。如果msgSomeMessageId 消息有翻译,请说:
Lorem %2 ipsum dolor sit %1 amet.
然后使用上面的示例调用将被格式化为:
Lorem Argument 2 ipsum dolor sit Argument 1 amet.
实际 Inno Setup 源代码中每个参数的含义应该很容易找到,但至少需要基本的 Pascal 语言阅读能力。
1.2 FmtSetupMessage1 函数
FmtSetupMessage1 更容易阅读,因为它只需要一个参数,%1 参数:
FmtSetupMessage1(msgSomeMessageId, 'Argument')
因此,由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}"
将生成此格式化消息:
Lorem Argument 2 ipsum dolor sit Argument 1 amet.
由于{cm:...} 常量格式比这更复杂,我建议您帮助了解详细信息。
2.2 [代码]部分的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;