Я пытаюсь разместить метку на странице 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, и компиляция не выполняется с

Ожидается точка с запятой (;)

Ошибка. Этот синтаксис работает при добавлении метки на страницу, созданную пользователем. Почему это не удается при попытке добавить его в wpPreparing?

1
Robert Wigley 29 Фев 2016 в 21:40

2 ответа

Лучший ответ

wpPreparing не объект, это просто числовая константа.

WizardForm.PreparingPage содержит ссылку на страницу «Подготовка к установке». Обратите внимание, что это уже тип TNewNotebookPage, а не TWizardPage. Таким образом, вы используете его напрямую как родитель.


Также обратите внимание, что StatusLabel находится на странице «Установка». Возможно, вы захотите вместо этого связать свой новый ярлык с 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...';
1
Martin Prikryl 29 Фев 2016 в 20:46

Я воспроизвел ваш код. Это работает, если вы используете только WizardForm в качестве родителя. Но это в верхнем левом углу формы ...

wpPreparing - это имя константы, которая содержит идентификатор соответствующей страницы.

И вам нужно создать экземпляр UninstallingLabel

1
Marco Rebsamen 29 Фев 2016 в 20:32