5

最近、さまざまなインストールタイプ(インストール、更新、修復)をInnoSetupに追加しました。それはすべてかなりうまくいきます。

[Types]
Name: Install; Description: "Install OLP"; 
Name: Update; Description: "Update an existing version of OLP"; 
Name: Repair; Description: "Repair OLP"; 

私があまり好きではないのは、インストールの実行時に表示される、インストールの種類の1つを選択するためのドロップダウンリストだけです。

ドロップダウンリストをラジオグループに置き換える方法はありますか?

ありがとう

4

2 に答える 2

16

ラジオボタンを使用できます(Inno Setupで使用できるラジオグループコンポーネントがないため):

[Code]
procedure OnTypeChange(Sender: TObject);
begin
  { set the item index in hidden TypesCombo }
  WizardForm.TypesCombo.ItemIndex := TNewRadioButton(Sender).Tag;
  { notify TypesCombo about the selection change }
  WizardForm.TypesCombo.OnChange(nil);
end;

procedure InitializeWizard;
var
  I: Integer;
  RadioButton: TNewRadioButton;
begin
  for I := 0 to WizardForm.TypesCombo.Items.Count - 1 do
  begin
    { create radio button and set the basic properties }
    RadioButton := TNewRadioButton.Create(WizardForm);
    RadioButton.Parent := WizardForm.SelectComponentsPage;
    RadioButton.Left := WizardForm.TypesCombo.Left;
    RadioButton.Top := WizardForm.TypesCombo.Top + I * RadioButton.Height;
    RadioButton.Width := WizardForm.TypesCombo.Width;
    { check just the first item }
    RadioButton.Checked := I = 0;
    RadioButton.Caption := WizardForm.TypesCombo.Items[I];
    { the Tag property substitutes the index property }
    RadioButton.Tag := I;
    RadioButton.TabOrder := I;     
    RadioButton.OnClick := @OnTypeChange;
  end;
  { hide the TypesCombo combo box }
  WizardForm.TypesCombo.Visible := False;

  { if you're not using the "iscustom" flag in any type entry, you can remove }
  { the following lines, because they resize and reposition the check list box }
  { for component selection, which is hidden, if you don't use "iscustom" flag }
  I := WizardForm.ComponentsList.Top - 
    (RadioButton.Top + RadioButton.Height + 8);
  WizardForm.ComponentsList.Top := RadioButton.Top + RadioButton.Height + 8;
  WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + I;
end;

そして結果(iscustomコンポーネントリストを含む):

ここに画像の説明を入力してください

または、InnoSetupのラジオボタンを含めることができるチェックリストボックスなどを使用できます。

[Code]
procedure OnTypeChange(Sender: TObject);
begin
  { set the item index in hidden TypesCombo }
  WizardForm.TypesCombo.ItemIndex := TNewCheckListBox(Sender).ItemIndex;
  { notify TypesCombo about the selection change }
  WizardForm.TypesCombo.OnChange(nil);
end;

procedure InitializeWizard;
var
  I: Integer;
  CheckListBox: TNewCheckListBox;
begin
  { create the TNewCheckListBox object and set the basic properties }
  CheckListBox := TNewCheckListBox.Create(WizardForm);
  CheckListBox.Parent := WizardForm.SelectComponentsPage;
  CheckListBox.Left := WizardForm.TypesCombo.Left;
  CheckListBox.Top := WizardForm.TypesCombo.Top;
  CheckListBox.Width := WizardForm.TypesCombo.Width;
  CheckListBox.Height := CheckListBox.MinItemHeight * 
    WizardForm.TypesCombo.Items.Count + 4;
  CheckListBox.TabOrder := 0;
  { assign the selection change event }
  CheckListBox.OnClickCheck := @OnTypeChange;
  { add radio buttons from all TypesCombo items, select the first item }
  for I := 0 to WizardForm.TypesCombo.Items.Count - 1 do
    CheckListBox.AddRadioButton(WizardForm.TypesCombo.Items[I], 
      '', 0, I = 0, True, nil);
  { hide the TypesCombo combo box }
  WizardForm.TypesCombo.Visible := False;

  { if you're not using the "iscustom" flag in any type entry, you can remove }
  { the following lines, because they resize and reposition the check list box }
  { for component selection, which is hidden, if you don't use "iscustom" flag }
  I := WizardForm.ComponentsList.Top - 
    (CheckListBox.Top + CheckListBox.Height + 8);
  WizardForm.ComponentsList.Top := CheckListBox.Top + 
    CheckListBox.Height + 8;
  WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + I;
end;

そして結果(iscustomコンポーネントリストを含む):

ここに画像の説明を入力してください

于 2013-02-28T15:40:37.673 に答える
0

このためのきちんとした解決策はCreateInputOptionPage、コンポーネント選択ページの前にラジオボタンを備えた別のページを作成するために使用することです。(CodeDlg.issスクリプトにこの例があります。)

さらにきちんとしたオプションは、それが完全に不要であるため、まったく尋ねないことです。すでにインストールされているバージョンを自動的に検出できます。インストールされていない場合はインストール、インストールされているが古い場合はアップグレード、インストールされて同じバージョンの場合は修復、最後にインストールされているが新しいバージョンです。次に、それはダウングレードです-これは、許可しない(より安全)か、許可するが警告を表示する(より便利な、人々がダウングレードしたいと思う可能性がある場合)ことができます。

于 2013-02-28T20:37:42.210 に答える