您可以使用单选按钮(因为有在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
组件列表):
或者您可以使用eg检查列表框,其能够包含在创新安装单选按钮:
[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
部件列表):
嗨TLama,非常感谢你的解决方案。它工作完美。 – 2013-03-01 07:17:10
不客气! – TLama 2013-03-01 13:22:53
您应该按照[按字体大小缩放单选按钮列表](http://stackoverflow.com/q/30469660/850848) – 2015-05-27 09:02:31