您能否创建一个类似于“完成”页面的自定义页面?

问题描述

您能否创建一个类似于“完成”页面自定义页面

这是自定义页面代码

UserPage2 := CreateCustomPage(
  UserPage1.ID,'Title','Details'
); 

这个自定义页面

enter image description here

需要看起来像这样,

enter image description here

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

解决方法

  1. 在您的自定义页面上重新创建 FinishedPage 控件。

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

var
  FakeFinishedPage: TWizardPage;
  FakeFinishedBitmapImage: TBitmapImage;
  FakeFinishedLabel: TNewStaticText;
  FakeFinishedHeadingLabel: TNewStaticText;

procedure CopyBounds(Dest,Source: TControl);
begin
  Dest.Left := Source.Left;
  Dest.Top := Source.Top;
  Dest.Width := Source.Width;
  Dest.Height := Source.Height;
end;

procedure FakeFinishedPageActivate(Sender: TWizardPage);
begin
  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;

  // With WizardStyle=modern and/or WizardResizable=yes,// we cannot copy the sizes in InitializeWizard as they are not final yet.
  CopyBounds(FakeFinishedBitmapImage,WizardForm.WizardBitmapImage2);
  FakeFinishedBitmapImage.Anchors := WizardForm.WizardBitmapImage2.Anchors;

  CopyBounds(FakeFinishedLabel,WizardForm.FinishedLabel);
  FakeFinishedLabel.Anchors := WizardForm.FinishedLabel.Anchors;
  CopyBounds(FakeFinishedHeadingLabel,WizardForm.FinishedHeadingLabel);
  FakeFinishedHeadingLabel.Anchors := WizardForm.FinishedHeadingLabel.Anchors;

  WizardForm.BackButton.Visible := False;
  WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish);
end;

procedure CopyLabel(Dest,Source: TNewStaticText);
begin
  Dest.AutoSize := Source.AutoSize;
  Dest.Font := Source.Font;
  Dest.ShowAccelChar := Source.ShowAccelChar;
  Dest.WordWrap := Source.WordWrap;
end;

procedure InitializeWizard();
var
  S: string;
begin
  // ...

  FakeFinishedPage := CreateCustomPage(UserPage1.ID,'',''); 
  FakeFinishedPage.OnActivate := @FakeFinishedPageActivate;

  FakeFinishedBitmapImage := TBitmapImage.Create(WizardForm);
  FakeFinishedBitmapImage.Parent := FakeFinishedPage.Surface;
  FakeFinishedBitmapImage.BackColor := WizardForm.WizardBitmapImage2.BackColor;
  FakeFinishedBitmapImage.Bitmap := WizardForm.WizardBitmapImage2.Bitmap;
  FakeFinishedBitmapImage.Stretch := WizardForm.WizardBitmapImage2.Stretch;

  FakeFinishedLabel := TNewStaticText.Create(WizardForm);
  FakeFinishedLabel.Parent := FakeFinishedPage.Surface;
  CopyLabel(FakeFinishedLabel,WizardForm.FinishedLabel);
  S := SetupMessage(msgFinishedLabelNoIcons) + #13#13 + SetupMessage(msgClickFinish);
  StringChangeEx(S,'[name]','My Program',True);
  FakeFinishedLabel.Caption := S;

  FakeFinishedHeadingLabel := TNewStaticText.Create(WizardForm);
  FakeFinishedHeadingLabel.Parent := FakeFinishedPage.Surface;
  CopyLabel(FakeFinishedHeadingLabel,WizardForm.FinishedHeadingLabel);
  S := SetupMessage(msgFinishedHeadingLabel);
  StringChangeEx(S,True);
  FakeFinishedHeadingLabel.Caption := S;
end;

enter image description here


有一些限制:


虽然要避免所有这些黑客行为,但请考虑允许安装正常进行,但不要更改任何内容。最终可能更容易实施。


相关问题: