如何在 Inno Setup OuterNotebook 添加新页面?

How to add a new page to Inno Setup OuterNotebook?

作为我正在使用 Inno Setup 的安装程序的一部分,我需要复制 wpWelcome 页面,但内容不同。我创建了一个 TNotebookPage,添加了我想要的图像、面板和内容,它按预期显示。但是我不确定如何将它添加到 WizardForm 我想要的位置。我可以强制它显示为第一页,但单击 next/back 移动会使页面消失。

如何将笔记本页面插入OuterNotebook的相关位置?

function CreatePage: TNewNoteBookPage;
var
  page: TNewNoteBookPage;
begin 
  page := TNewNoteBookPage.Create( WizardForm );
  page.Notebook := WizardForm.OuterNotebook;
  page.Align := alClient;
  page.Color := clWindow;
  page.Visible:= True;

  Result := page;
end;

procedure InitializeWizard;
var
  myPage: TNewNoteBookPage;
begin
  WizardForm.OuterNotebook.ActivePage := WizardForm.WelcomePage;
  myPage := CreatePage();

  { how do I specify where I want the page in the OuterNotebook? }
end;

通常,您使用 TNewNotebookPage.PageIndex 指定页面位置。但我担心 "manually" 修改 OuterNotebook 会破坏内部 Inno Setup 逻辑。


为什么不直接修改现有的欢迎页面,而是创建一个新页面?

参见,例如,


或者,在 InnerNotebook 上创建自定义页面,但将其展开以覆盖整个 window。

How to hide the main panel and show an image over the whole page?

Martin 的建议非常有帮助,虽然没有直接解决问题,但他们给了我一个想法。我需要的不仅仅是覆盖 window 的图像。因此,我的解决方案是创建一个 TNoteBookPage,我可以根据需要对其进行格式化,还有一个 TWizardPage。由于无法在不破坏 inno-setup 的顺序的情况下将笔记本页面添加到安装程序,因此我使用自定义页面来维护顺序,并且当 CustomPage 设置为活动时,我将活动页面切换为笔记本页面,从而显示我需要的内容。

[Code]
Apage, TWizardPage;
ANotebookPage: TNewNoteBookPage;

function CreatePage: TNewNoteBookPage;
var
  page: TNewNoteBookPage;
  sideBarImage: TBitmapImage;
  panel: TPanel;
begin 

  {create page, sidebar and panel for our main content}
  page := TNewNoteBookPage.Create( WizardForm );
  page.Notebook := WizardForm.OuterNotebook;
  page.Align := alClient;
  page.Color := clWindow;
  page.Visible:= True;

  { copies the already loaded sidebar image on the welcome page to this notebook page}
  sideBarImage := TBitmapImage.Create( WizardForm );
  sideBarImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;       
  sideBarImage.Top := WizardForm.WizardBitmapImage.Top;
  sideBarImage.Left := WizardForm.WizardBitmapImage.Left;
  sideBarImage.Width := WizardForm.WizardBitmapImage.Width;
  sideBarImage.Height := WizardForm.WizardBitmapImage.Height;
  sideBarImage.BackColor := WizardForm.WizardBitmapImage.BackColor;
  sideBarImage.Parent := page;

  panel := TPanel.Create( WizardForm );
  panel.BevelOuter := bvNone;
  panel.Color  := clWindow;
  panel.Parent := page;
  panel.Left   := sideBarImage.Width + ScaleX(10);
  panel.Height := page.Height;
  panel.Width  := page.Width - sideBarImage.Width;

  { at this point we have a panel we can populate with content }

  Result := page
end

procedure InitializeWizard;
begin
  ANotebookPage := CreateOneClickInstallPage();
  APage := CreateCustomPage( wpLicense, 'Install', '');
end

procedure CurPageChanged( CurPageID: Integer );
begin
  WizardForm.Bevel1.Visible := true;
  WizardForm.MainPanel.Visible := true;
  WizardForm.InnerNotebook.Visible := true;

  if CurPageID = APage.ID then begin
    WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)  
    WizardForm.Bevel1.Visible := false;
    WizardForm.MainPanel.Visible := false;
    WizardForm.InnerNotebook.Visible := false;
    WizardForm.OuterNotebook.ActivePage := ANoteBookPage;
  end;
end