Замена поля со списком Inno Setup типа установки с переключателями на отдельной странице (Install Shield like) - PullRequest
0 голосов
/ 21 мая 2018

Я использую установщик Inno Setup для моего приложения.

Чтобы разрешить пользователю выбирать полная или компактная установка , я использую следующий код,

[Types]
Name: "full"; Description: "Full Installation"
Name: "compact"; Description: "Lite Installation"
Name: "custom"; Description: "Custom Installation"; Flags: iscustom

[Components]
Name: "One"; Description: "First"; Types: full compact custom; Flags: fixed
Name: "Two"; Description: "second"; Types: full
Name: "Three"; Description: "Third"; Types: full
Name: "Four"; Description: "Fourth"; Types: full
Name: "Five"; Description: "Fifth"; Types: full

И я получаю следующий пользовательский интерфейс:

enter image description here

Есть ли возможность изменить этот способ (через поле со списком) извыбираете «Тип»?

Я хочу выбрать «Тип», как в примере ниже.И если пользователь выбирает пользовательский, он должен иметь возможность выбрать, какие «Компоненты» установить.

enter image description here

1 Ответ

0 голосов
/ 22 мая 2018

Одним из способов является создание пользовательской страницы с меню «типы», скрытие стандартного поля со списком «типы» и обновление его выбора в соответствии с типом, выбранным пользователем в пользовательском меню.

[Types]
Name: "typical"; Description: "Typical installation"
Name: "complete"; Description: "Complete installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "main"; Description: "Main Files"; Types: complete typical custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: complete
Name: "help\english"; Description: "English"; Types: complete
Name: "help\dutch"; Description: "Dutch"; Types: complete

[Code]

var
  TypesPage: TWizardPage;
  TypicalButton: TNewRadioButton;
  CompleteButton: TNewRadioButton;
  CustomButton: TNewRadioButton;

procedure InitializeWizard();
begin
  { Create custom "types" page }
  TypesPage :=
    CreateCustomPage(
      wpSelectDir, 'Setup Type', 'Choose the setup type that best suits your needs.');

  TypicalButton := TNewRadioButton.Create(TypesPage);
  TypicalButton.Parent := TypesPage.Surface;
  TypicalButton.Caption := 'Typical';
  TypicalButton.Height := ScaleY(TypicalButton.Height);
  TypicalButton.Checked := True; { default, unless other type is selected below }

  CompleteButton := TNewRadioButton.Create(TypesPage);
  CompleteButton.Parent := TypesPage.Surface;
  CompleteButton.Caption := 'Complete';
  CompleteButton.Height := ScaleY(CompleteButton.Height);
  CompleteButton.Top := TypicalButton.Top + TypicalButton.Height + ScaleY(16);
  CompleteButton.Checked := (WizardForm.TypesCombo.ItemIndex = 1);

  CustomButton := TNewRadioButton.Create(TypesPage);
  CustomButton.Parent := TypesPage.Surface;
  CustomButton.Caption := 'Custom';
  CustomButton.Height := ScaleY(CustomButton.Height);
  CustomButton.Top := CompleteButton.Top + CompleteButton.Height + ScaleY(16);
  CompleteButton.Checked := (WizardForm.TypesCombo.ItemIndex = 2);

  { Hide "types" combo }
  WizardForm.TypesCombo.Visible := False;
  WizardForm.IncTopDecHeight(WizardForm.ComponentsList,
    -(WizardForm.ComponentsList.Top - WizardForm.TypesCombo.Top));
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  { When leaving "types" page, update hidden "types" combo box }
  { according to user selection... }
  if CurPageID = TypesPage.ID then
  begin
    if CompleteButton.Checked then WizardForm.TypesCombo.ItemIndex := 1
      else 
    if CustomButton.Checked then WizardForm.TypesCombo.ItemIndex := 2
      else WizardForm.TypesCombo.ItemIndex := 0;
    { .. and have Inno Setup update components selection accordingly }
    WizardForm.TypesCombo.OnChange(WizardForm.TypesCombo);
  end;
  Result := True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  { Skip "components" page, unless "custom" type was selected }
  Result := (PageID = wpSelectComponents) and (not CustomButton.Checked);
end;

enter image description here

enter image description here


Чтобы добавить дополнительные изображения и надписи, см .:
Inno Setup Размещение изображения / элемента управления на пользовательской странице


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...