Как перейти на страницу по нажатию кнопки?

Мне нужна простая вещь: иметь кнопки продвижения и обычной установки. В обычном случае все просто — я использовал кнопку «Далее» по умолчанию с некоторой логикой на NextButtonClick, чтобы установить переменную условия и сохранить некоторые страницы с помощью ShouldSkipPage. Тем не менее, для расширенной настройки я создал новую кнопку, и все, что мне нужно сделать, это открыть следующую страницу установщика:

procedure CurPageChanged(CurPageID : Integer);
begin
if CurPageID = wpWelcome then begin
    AdvancedButton := TButton.Create(WizardForm);
    AdvancedButton.Caption := 'Advanced Install';
    AdvancedButton.Left := WizardForm.InfoAfterPage.Left + 10;
    AdvancedButton.Top := WizardForm.InfoAfterPage.Height + 88;
    AdvancedButton.Parent := WizardForm.NextButton.Parent;
    # AdvancedButton.OnClick :=  What shall I call to open say next page (or some page by given PageID value)
    end
    else begin
    AdvancedButton.Visible := False;
    end;

end;

Итак, что я должен вызвать, чтобы открыть, скажем, следующую страницу (или какую-то страницу с заданным значением PageID) при нажатии кнопки (не удалось найти какую-либо функцию NextPage или какую-либо функцию SetPage в Inno API)?


person DuckQueen    schedule 04.03.2014    source источник
comment
OT: сначала после создания элемента управления установите свойство Parent для элемента управления. Это лучше сделать, потому что вы можете захотеть применить выравнивание элемента управления по его родителю, и вы можете по ошибке добавить такую ​​строку до того, как родитель будет назначен.   -  person TLama    schedule 04.03.2014


Ответы (1)


В Inno Setup нет такой вещи, как «Прямой переход на страницу». Все, что вам нужно, это незаметно пропускать определенные страницы в «Расширенном режиме».

Просто сделайте то же самое, что и в обычном установщике. Установите одну переменную для удержания «Расширенного режима». После нажатия кнопки «Дополнительно»:

[Code]
var
  IsAdvanced: Boolean;

procedure AdvancedButtonClick(Sender: TObject);
begin
  IsAdvanced := True;
  WizardForm.NextButton.OnClick(nil);
end;

procedure InitializeWizard;
var
  AdvancedButton: TNewButton;
begin
  // not necessary; just for sure
  IsAdvanced := False;
  // create the button
  AdvancedButton := TNewButton.Create(WizardForm);
  AdvancedButton.Caption := 'Advanced Install';
  AdvancedButton.Left := WizardForm.InfoAfterPage.Left + 10;
  AdvancedButton.Top := WizardForm.InfoAfterPage.Height + 88;
  AdvancedButton.Parent := WizardForm.NextButton.Parent;
  AdvancedButton.OnClick := @AdvancedButtonClick;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  // the <page where you want to end up> fill with the wizard page constant
  // of the page where you want to end up, e.g. wpReady
  Result := IsAdvanced and (PageID <> <page where you want to end up>);
end;

С помощью этой логики вы можете имитировать тихий «переход» на определенную страницу.

person Slappy    schedule 04.03.2014
comment
Обратите внимание, что страницы не обязательно отображаются в порядке числового идентификатора, поэтому это может привести к пропуску ненужных страниц. Кроме того, необходимо не пропускать страницу, на которой находится сам вариант IsAdvanced, иначе пользователь может быть удивлен, когда щелкнет Назад, чтобы передумать. - person Miral; 04.03.2014
comment
Не потребует ли пользователь нажимать «Дополнительно» и «Далее»? Я бы хотел, чтобы он нажимал только на одну кнопку — это моя главная мысль. - person DuckQueen; 04.03.2014
comment
Да, это было бы. Однако вы можете имитировать следующее нажатие кнопки, как я показал в своем редактировании (Slappy, я надеюсь, вы не возражаете против моего перехвата :-) - person TLama; 04.03.2014