Inno设置消息参数

时间:2015-08-08 22:42:15

标签: inno-setup

在“消息”文件下的Inno设置帮助中,我发现了这个:

  

某些消息采用%1和%2等参数。您可以重新排列参数的顺序(即在%1之前移动%2),并在需要时复制参数(即“%1 ...%1%2”)。在带参数的消息上,使用两个连续的“%”字符来嵌入单个“%”。 “%n”会创建换行符。

在“自定义消息”下:

  

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

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

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

干杯,

1 个答案:

答案 0 :(得分:3)

TL;博士

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

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

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

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;