【问题标题】:Change messages/texts at runtime (Inno Setup)在运行时更改消息/文本(Inno Setup)
【发布时间】:2012-03-05 18:05:23
【问题描述】:

在 innosetup 脚本中,可以这样定义消息:

[Messages]
WelcomeLabel2=This wizard will update [name] to version [name/ver]

现在我想在运行时更改此消息,如下所示:

procedure InitializeWizard;
begin
    //this doesn't work        
    WelcomeLabel2=NEW MESSAGE 
end;

这样做的正确方法是什么?我想动态更改欢迎页面的内容以显示安装程序是执行新安装还是更新。基于安装目录中是否存在一些可执行文件。

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    一种方式;

    [Languages]
    Name: "en"; MessagesFile: "compiler:Default.isl"
    
    [CustomMessages]
    en.WelcomeLabel2_ForInstall=intstall {#SetupSetting("AppName")}, {#SetupSetting("AppVersion")}
    en.WelcomeLabel2_ForUpdate=update {#SetupSetting("AppName")} to {#SetupSetting("AppVersion")}
    
    [code]
    procedure InitializeWizard(); 
    var
      message: string;
    begin 
        //some logic
        message := 'WelcomeLabel2_ForUpdate';
        WizardForm.WelcomeLabel2.Caption := CustomMessage(message);
    end;
    
    procedure CurPageChanged(CurPageID: Integer);
    begin
      case CurPageID of
          wpFinished : WizardForm.FinishedLabel.Caption := 'bla bla';
      end;
    end;
    

    【讨论】:

    • 我也想使用 WizardForm.FinishedLabelNoIcons.Caption 来执行此操作,但 Inno Setup 编译器错误并显示“未知标识符”。
    • 上面更新了,看来你可以通过WizardForm.FinishedLabel得到那个(但不是InitializeWizard
    • 谢谢亚历克斯。我必须更改这么多消息,因此在代码部分中动态更改 MessagesFile 可能是一个更好的主意。你知道怎么做吗?
    • 我不认为你可以,它们被编译到设置中并根据语言自动使用
    【解决方案2】:

    嗯,这行不通,我想。一种方法是为安装程序创建两个页面 - 一个具有安装过程的布局,另一个具有更新过程的布局。然后,以您手动决定显示哪一个的方式更改页面顺序。

    在我的回答here中可以找到将新页面集成到流程中的示例。

    【讨论】:

    • 是否可以根据欢迎页面创建一个新页面?还是我必须重新创建欢迎页面?
    • 事件虽然 Alex K. 的解决方案是正确的:我不认为有像“页面继承”这样的东西 - 你必须从头开始创建页面。
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多