在“消息”文件下的Inno设置帮助中,我发现了这个:
某些消息采用%1和%2等参数。您可以重新排列参数的顺序(即在%1之前移动%2),并在需要时复制参数(即“%1 ...%1%2”)。在带参数的消息上,使用两个连续的“%”字符来嵌入单个“%”。 “%n”会创建换行符。
在“自定义消息”下:
消息可能带有参数,从%1到%9。您可以重新排列参数的顺序(即在%1之前移动%2),并在需要时复制参数(即“%1 ...%1%2”)。在带参数的消息上,使用两个连续的“%”字符来嵌入单个“%”。 “%n”会创建换行符。
但是...对于我的生活,我无法找到如何使用这些...到目前为止,我已经看到%1工作(转换为应用程序名称),但当我将%1更改为%2(向上)至 - %9)它只显示为%2,%3,%4等等......
我只是好奇 - 我如何使用这些参数,它们分配在哪里?
干杯,
答案 0 :(得分:3)
对于[Messages]
部分,它们是硬编码的并且是特定于消息的,可能没有记录。对于[CustomMessages]
它就在你身上。
对于[Messages]
部分,这很难回答,因为它在源代码中是硬编码的,并且对于每条消息都是特定的,因此它是一种移动目标。如果您要在源* .pas文件中搜索FmtSetupMessage
和FmtSetupMessage1
字符串,则可以找到它们。这些是消息格式化的地方以及它们传递参数的位置。我不知道是否有这方面的文档,所以我会留下来搜索源代码。这里有一些关于要搜索的函数。
第一个函数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语言的基本阅读技能。
FmtSetupMessage1
更容易阅读,因为它只需要一个参数%1
参数:
FmtSetupMessage1(msgSomeMessageId, 'Argument')
因此,FmtSetupMessage1
函数格式化的消息很可能只包含%1
参数。
[CustomMessages]
部分的原理是提供一种定义自定义消息的方法,其中包括您传递它们以格式化输出字符串的参数。因此,完全取决于您将通过以下任何方式传递的内容。
在脚本部分中,您可以使用{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:...}
常量格式比这更复杂,我会建议您提供帮助以获取详细信息。
在[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;