Почему переключатель на пользовательской странице не отмечен в Inno Setup? - PullRequest
1 голос
/ 16 апреля 2020

Почему переключатели rbStandardInstallType и rbCustomInstallType не отмечены, хотя я установил для свойства Checked одного из них значение True? С другой стороны, переключатели rbDefaultMSSQLInstance и rbNamedMSSQLInstance проверяются.

Я создаю радио-кнопки так:

function CreateRadioButton(
  AParent: TNewNotebookPage; AChecked: Boolean; AWidth, ALeft, ATop, AFontSize: Integer;
  AFontStyle: TFontStyles; const ACaption: String): TNewRadioButton;
begin
  Result := TNewRadioButton.Create(WizardForm);
  with Result do
    begin
      Parent := AParent;
      Checked := AChecked;
      Width := AWidth;
      Left := ALeft;
      Top := ATop;
      Font.Size := AFontSize;
      Font.Style := AFontStyle;
      Caption := ACaption;
    end;
end;

У меня есть 2 пользовательские страницы, на которых я должен показывать свое изображение слева, а некоторые текстовые и радио-кнопки справа (2 радио-кнопки на страница). Итак, в моей процедуре InitializeWizard я написал следующее:

wpSelectInstallTypePage := CreateCustomPage(wpSelectDir, 'Caption', 'Description');
rbStandardInstallType := CreateRadioButton(WizardForm.InnerPage, True, WizardForm.InnerPage.Width, ScaleX(15), WizardForm.MainPanel.Top + ScaleY(30), 9, [fsBold], 'Standard');
rbCustomInstallType := CreateRadioButton(WizardForm.InnerPage, False, rbStandardInstallType.Width, rbStandardInstallType.Left, rbStandardInstallType.Top + rbStandardInstallType .Height + ScaleY(16), 9, [fsBold], 'Custom');

wpMSSQLInstallTypePage := CreateCustomPage(wpSelectInstallTypePage.ID, 'Caption2', 'Description2');
rbDefaultMSSQLInstance := CreateRadioButton(WizardForm.InnerPage, True, WizardForm.InnerPage.Width, ScaleX(15), WizardForm.MainPanel.Top + ScaleY(30), 9, [fsBold], 'DefaultInstance');
rbNamedMSSQLInstance := CreateRadioButton(WizardForm.InnerPage, False, rbDefaultMSSQLInstance.Width, rbDefaultMSSQLInstance.Left, rbDefaultMSSQLInstance.Top + rbDefaultMSSQLInstance.Height + ScaleY(10), 9, [fsBold], 'NamedInstance');

И, наконец, вот мой код CurPageChanged для правильного отображения всех элементов управления:

procedure CurPageChanged(CurPageID: Integer);
  begin
    case CurPageID of
      wpSelectInstallTypePage.ID, wpMSSQLInstallTypePage.ID:
          WizardForm.InnerNotebook.Visible := False;  
    else
      WizardForm.InnerNotebook.Visible := True;
    end;
    rbDefaultMSSQLInstance.Visible := CurPageID = wpMSSQLInstallTypePage.ID;
    rbNamedMSSQLInstance.Visible := CurPageID = wpMSSQLInstallTypePage.ID;
    rbStandardInstallType.Visible := CurPageID = wpSelectInstallTypePage.ID;
    rbCustomInstallType.Visible := CurPageID = wpSelectInstallTypePage.ID;
  end

1 Ответ

0 голосов
/ 16 апреля 2020

Вы добавляете переключатели в неправильный родительский элемент управления (WizardForm.InnerPage). Не для пользовательских страниц, которые вы создаете. Затем вы можете обойти этот недостаток, явно скрыв / отобразив переключатели в CurPageChanged.

Поскольку все четыре переключателя имеют одного и того же родителя (WizardForm.InnerPage), можно проверить только одну из них. Поэтому, когда вы проверяете rbDefaultMSSQLInstance, rbStandardInstallType неявно не проверяется.


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

(убедитесь, что вы удалили лишний код CurPageChanged)


Вам также следует рассмотреть возможность использования CreateInputOptionPage вместо добавление переключателей вручную на пользовательскую страницу c.

...