答案 0 :(得分:4)
不,Inno Setup不支持多列(检查)列表框。
但您可以轻松实现一个自定义页面,其中包含标准"选择其他任务" 页面的外观,只需三个单独的复选框。然后,您可以使用Check
parameter代替Tasks
parameter将自定义任务绑定到Files
,Icons
等部分。
[Files]
Source: "FileForSubTask_0_1.txt"; DestDir: "{app}"; Check: GetCustomTask(0, 1);
Source: "FileForSubTask_0_2.txt"; DestDir: "{app}"; Check: GetCustomTask(0, 2);
...
[Code]
var
CustomSelectTasksPage: TWizardPage;
TasksLists: array of TNewCheckListBox;
const
TaskColumns = 3;
procedure InitializeWizard();
var
TasksList: TNewCheckListBox;
I, GapWidth: Integer;
begin
CustomSelectTasksPage :=
CreateCustomPage(
wpSelectTasks, SetupMessage(msgWizardSelectTasks),
SetupMessage(msgSelectTasksDesc));
SetArrayLength(TasksLists, TaskColumns);
GapWidth := ScaleX(16);
for I := 0 to TaskColumns - 1 do
begin
TasksList := TNewCheckListBox.Create(WizardForm);
TasksList.Width :=
(CustomSelectTasksPage.SurfaceWidth - (GapWidth * (TaskColumns - 1))) div
TaskColumns;
TasksList.Left := I * (TasksList.Width + GapWidth);
TasksList.Top := 0;
TasksList.Height := WizardForm.InnerNotebook.Height - ScaleY(8);
TasksList.BorderStyle := bsNone;
TasksList.Color := clBtnFace;
TasksList.ShowLines := False;
TasksList.MinItemHeight := ScaleY(22);
TasksList.ParentColor := True;
TasksList.WantTabs := True;
TasksList.Parent := CustomSelectTasksPage.Surface;
TasksLists[I] := TasksList;
end;
TasksLists[0].AddCheckBox('TASK 0:0', '', 0, False, True, False, False, nil);
TasksLists[0].AddCheckBox('Subtask 0:1', '', 1, False, True, False, False, nil);
TasksLists[0].AddCheckBox('Subtask 0:2', '', 1, False, True, False, False, nil);
TasksLists[1].AddCheckBox('TASK 1:0', '', 0, False, True, False, False, nil);
TasksLists[1].AddCheckBox('Subtask 1:1', '', 1, False, True, False, False, nil);
TasksLists[1].AddCheckBox('Subtask 1:2', '', 1, False, True, False, False, nil);
TasksLists[2].AddCheckBox('TASK 2:0', '', 0, False, True, False, False, nil);
TasksLists[2].AddCheckBox('Subtask 2:1', '', 1, False, True, False, False, nil);
TasksLists[2].AddCheckBox('Subtask 2:2', '', 1, False, True, False, False, nil);
end;
function GetCustomTask(ListIndex: Integer; TaskIndex: Integer): Boolean;
begin
Result := TasksLists[ListIndex].Checked[TaskIndex];
end;