【问题标题】:Inno Setup Message ArgumentsInno 设置消息参数
【发布时间】:2015-08-09 16:41:08
【问题描述】:

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

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

在“自定义消息”下:

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

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

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

干杯,

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      相关资源
      最近更新 更多