Inno Setup 在 wpPreparing 页面上放置控件

Inno Setup Place controls on wpPreparing Page

我试图在 wpPreparing 页面上放置一个标签,以指示在 运行 新安装之前卸载现有版本。这是我的代码:

function PrepareToInstall(var NeedsRestart: Boolean): String;
var
  UninstallingLabel: TNewStaticText;
  intResultCode: Integer;
begin
  with UninstallingLabel do
    begin
      Caption := 'Uninstalling existing version...';
      Left := WizardForm.StatusLabel.Left;
      Top := WizardForm.StatusLabel.Top;
      Parent := wpPreparing.Surface;
    end;
  if strExistingInstallPath <> '' then
    begin
      Exec(GetUninstallString, '/verysilent /suppressmsgboxes', '', SW_HIDE,
        ewWaitUntilTerminated, intResultCode);
    end;
end;

问题是它似乎不喜欢 Parent := wpPreparing.Surface 并且编译失败并显示

Semicolon (;) expected

错误。将标签添加到自定义创建的页面时,此语法有效。为什么在尝试将其添加到 wpPreparing 时会失败?

我重播了你的代码。如果您仅使用 WizardForm 作为父项,它会起作用。但是它在表格的左上角...

wpPreparing 是保存相应页面 ID 的常量名称。

并且您必须创建 UninstallingLabel

的实例

wpPreparing 不是 object,它只是一个数值常量。

WizardForm.PreparingPage 包含对 "Preparing to Install" 页面的引用。请注意,它已经是 TNewNotebookPage 类型,而不是 TWizardPage。所以你直接用它作为 parent.


另请注意 StatusLabel 在 "Installing" 页面上。您可能希望将新标签关联到 PreparingLabel


并且您必须创建 UninstallingLabel


UninstallingLabel := TNewStaticText.Create(WizardForm);

with UninstallingLabel do
begin
  Caption := 'Uninstalling existing version...';
  Left := WizardForm.PreparingLabel.Left;
  Top := WizardForm.PreparingLabel.Top;
  Parent := WizardForm.PreparingPage;
end;

虽然你真的想遮蔽 PreparingLabel(因为你使用它的坐标)。

重新使用它怎么样?

WizardForm.PreparingLabel.Caption := 'Uninstalling existing version...';