Inno Setup Простая страница прогресса для раздела Run

Мой установщик очень простой, в основном это:

  1. Страница приветствия
  2. Страница прогресса
  3. Последняя страница

Страницы приветствия и финала стандартные (всего одна кнопка). На странице «Прогресс» я незаметно устанавливаю кучу других программ.

Фактический сценарий устанавливает каждую программу в разделе `[Run].
Проблема в том, что полоса достигает 100%, а затем остается там.
Я могу изменить только текст сообщения.

Я хотел бы показать прогресс с помощью Pascal Script (поскольку это может позволить мне иметь больше гибкости), что-то вроде:

procedure InitializeWizard;
begin
  ProgressPage.SetProgress(1, 100);
  exec(.......)
  ProgressPage.SetProgress(15, 100);
  exec(.......)
  ProgressPage.SetProgress(40, 100);
  ...
  ...
end;

Таким образом, я могу показать более точный индикатор выполнения. Вот что у меня (имитация установки. Взято из примера):

[Code]

var
  ProgressPage: TOutputProgressWizardPage;

procedure InitializeWizard;
begin
  ProgressPage := CreateOutputProgressPage('My App','');
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  I: Integer;
begin
  if CurPageID = wpWelcome then begin
    ProgressPage.SetText('Starting installation...', '');
    ProgressPage.SetProgress(0, 0);
    ProgressPage.Show;
    try
      for I := 0 to 10 do begin
        ProgressPage.SetProgress(I, 10);
        Sleep(100);
      end;
    finally
      ProgressPage.Hide;
    end;
  end else
    Result := True;
end;

Проблема в том, что когда я создаю установщик, он не показывает страницу приветствия (установщик запущен, но ничего не отображается).

Что я делаю не так?

Заранее спасибо!


person lepe    schedule 03.08.2011    source источник
comment
Эх, не делайте этого внутри NextButtonClick. CurStepChanged (ssInstall) самое раннее.   -  person Deanna    schedule 03.08.2011
comment
Почему не внутри NextButtonClick? Это первый раз, когда я использую PascalScripting в Inno Setup, поэтому я не могу понять, как это должно быть.   -  person lepe    schedule 04.08.2011
comment
Поскольку его можно вызвать один или несколько раз, в большинстве случаев также необходимо установить это до того момента, когда пользователь подтвердит «да».   -  person Deanna    schedule 04.08.2011


Ответы (2)


Вы можете контролировать реальное положение индикатора выполнения в коде с помощью WizardForm.ProgressGauge.

person Deanna    schedule 03.08.2011
comment
Не могли бы вы указать мне на какой-нибудь пример? Не могу найти, как это используется (только документация). - person lepe; 04.08.2011
comment
Нет примера, но ссылка на объект в справке показывает свойства, к которым вам нужно получить доступ. Их можно вызвать из записей «До / после установки» в записях [Выполнить]. - person Deanna; 04.08.2011
comment
Думаю, использование WizardForm.ProgressGauge было бы более простым и элегантным. Однако, поскольку у меня нет примеров, а мой установщик работает нормально (как есть), я могу просто проголосовать за ваше предложение. Я не могу задать для него правильный ответ, так как не могу его проверить. Надеюсь, ты понимаешь. - person lepe; 05.08.2011
comment
@lepe Пример кода находится в моем ответе на вопрос Как установить значение индикатора выполнения в разделе [Выполнить] сценария установки Inno Setup? - person Martin Prikryl; 21.06.2016

Нашел!

Мне не хватало:

  • Result := True; после ProgressPage.Hide;
  • if CurPageID = wpReady (вместо wpWelcome)

Это решило проблему!

person lepe    schedule 03.08.2011