Inno setup 你能创建一个看起来像完成页面的自定义页面吗?

Inno setup 你能创建一个看起来像完成页面的自定义页面吗?,inno-setup,pascalscript,Inno Setup,Pascalscript,你能创建一个看起来像完成页面的自定义页面吗 这是自定义页面的代码 UserPage2:=CreateCustomPage( UserPage1.ID, “头衔”, “细节” ); 此自定义页 需要像这样 原因是,有时当用户再次运行安装程序时,他们可以选择很少的选项。根据选项,安装程序只需对已安装程序使用的设置进行少量更改,而无需通过重新安装来覆盖文件。因此,用户应该在更改后获得Finish对话框 在自定义页面上重新创建FinishedPage控件 进入页面时,您需要调整WizardFo

你能创建一个看起来像完成页面的自定义页面吗

这是自定义页面的代码

UserPage2:=CreateCustomPage(
UserPage1.ID,
“头衔”,
“细节”
); 
此自定义页

需要像这样

原因是,有时当用户再次运行安装程序时,他们可以选择很少的选项。根据选项,安装程序只需对已安装程序使用的设置进行少量更改,而无需通过重新安装来覆盖文件。因此,用户应该在更改后获得Finish对话框

  • 在自定义页面上重新创建
    FinishedPage
    控件

  • 进入页面时,您需要调整WizardForm.InnerNotebook的大小,以覆盖整个向导窗口(底部按钮区域除外),并隐藏页面标题控件

  • var
    伪造完成页面:TWizardPage;
    FakeFinishedBitmapImage:TBitmapImage;
    FakeFinishedLabel:TNewStaticText;
    FakeFinishedHeadingLabel:TNewStaticText;
    过程复制边界(目的地,来源:TControl);
    开始
    目的地左侧:=来源地左侧;
    目的地顶部:=来源地顶部;
    目的地宽度:=来源地宽度;
    目标高度:=源高度;
    结束;
    程序fakefinishedpage激活(发送方:TWizardPage);
    开始
    WizardForm.Bevel1.Visible:=False;
    WizardForm.MainPanel.Visible:=False;
    WizardForm.InnerNotebook.Left:=0;
    WizardForm.InnerNotebook.Top:=0;
    WizardForm.InnerNotebook.Width:=WizardForm.OuterNotebook.ClientWidth;
    WizardForm.InnerNotebook.Height:=WizardForm.OuterNotebook.ClientHeight;
    //WizardStyle=modern和/或WizardResizeable=yes,
    //我们无法复制InitializeWizard中的尺寸,因为它们还不是最终尺寸。
    复制边界(FakeFinishedBitmapImage、WizardForm.WizardBitmapImage2);
    FakeFinishedBitmapImage.Anchors:=WizardForm.WizardBitmapImage2.Anchors;
    复制边界(FakeFinishedLabel、WizardForm.FinishedLabel);
    FakeFinishedLabel.Anchors:=WizardForm.FinishedLabel.Anchors;
    复制边界(FakeFinishedHeadingLabel、WizardForm.FinishedHeadingLabel);
    FakeFinishedHeadingLabel.Anchors:=WizardForm.FinishedHeadingLabel.Anchors;
    WizardForm.BackButton.Visible:=False;
    WizardForm.NextButton.Caption:=设置消息(msgButtonFinish);
    结束;
    程序CopyLabel(目的地,来源:TNewStaticText);
    开始
    Dest.AutoSize:=Source.AutoSize;
    目的字体:=来源字体;
    Dest.ShowAccelChar:=Source.ShowAccelChar;
    Dest.WordWrap:=Source.WordWrap;
    结束;
    过程初始化Wizard();
    变量
    S:字符串;
    开始
    // ...
    FakeFinishedPage:=CreateCustomPage(UserPage1.ID,,,“”);
    FakeFinishedPage.OnActivate:=@FakeFinishedPageActivate;
    FakeFinishedBitmapImage:=TBitmapImage.Create(WizardForm);
    FakeFinishedBitmapImage.Parent:=FakeFinishedPage.Surface;
    FakeFinishedBitmapImage.BackColor:=WizardForm.WizardBitMapImage 2.BackColor;
    FakeFinishedBitmapImage.Bitmap:=WizardForm.WizardBitmapImage2.Bitmap;
    FakeFinishedBitmapImage.Stretch:=WizardForm.WizardBitmapImage2.Stretch;
    FakeFinishedLabel:=TNewStaticText.Create(WizardForm);
    FakeFinishedLabel.Parent:=FakeFinishedPage.Surface;
    CopyLabel(FakeFinishedLabel、WizardForm.FinishedLabel);
    S:=设置消息(msgFinishedLabelNoIcons)+#13#13+设置消息(msgClickFinish);
    StringChangeEx(S,“[名称]”,“我的程序”,真);
    FakeFinishedLabel.标题:=S;
    FakeFinishedHeadingLabel:=TNewStaticText.Create(WizardForm);
    FakeFinishedHeadingLabel.Parent:=FakeFinishedPage.Surface;
    CopyLabel(FakeFinishedHeadingLabel、WizardForm.FinishedHeadingLabel);
    S:=设置消息(msgFinishedHeadingLabel);
    StringChangeEx(S,“[名称]”,“我的程序”,真);
    FakeFinishedHeadingLabel。标题:=S;
    结束;
    


    有一些限制:

    • 当向导调整大小(使用
      wizardresizeable=yes
      )时,代码无法正确处理图像大小调整,但很容易修复
    • 解决方案不希望在显示此假完成页面后显示任何页面。也就是说,没有后退按钮,预计Finish按钮是用来终止安装程序的工具。毕竟,这是一个后续问题

    尽管要避免这些黑客攻击,但请考虑允许安装正常进行,但不需要更改任何东西。最终可能更容易实现


    相关问题:

    • –通过将控件覆盖在向导窗口的整个上部,根据需要隐藏/显示控件,解决了此问题的替代实现