demmax2004Цитата: для каждого пункта будут свои копируемые файлы и значения реестра, а так же индивидуальный выбор компонентов
Тут про скрытие и вывод компонентов ни слова)
Цитата: Можно ли добавить и удалить Компоненты в Runtime и привязать их к [Files] в runtime ???
Ну вот так например (на скорую руку, с костылями, в виде ручного забивания компонентов по типам).
[more]
Код: [no]
[Components]
Name: "programa"; Description: "Программа А"; Types: amin amax
Name: "programa\comp1"; Description: "Компонент 1"; Types: amin amax
Name: "programa\comp2"; Description: "Компонент 2"; Types: amin amax
Name: "programa\comp3"; Description: "Компонент 3"; Types: amax; Flags: fixed
Name: "programa\comp4"; Description: "Компонент 4"; Types: amax; Flags: fixed
Name: "programa\comp5"; Description: "Компонент 5"; Types: amin; Flags: fixed
Name: "programa\comp6"; Description: "Компонент 6"; Types: amin; Flags: fixed
Name: "pluginx"; Description: "Plugin для программы Х"; Types: xplug
Name: "pluginx\comp7"; Description: "Компонент 7"; Types: xplug
Name: "pluginx\comp8"; Description: "Компонент 8"; Types: xplug; Flags: fixed
[Types]
Name: "amin"; Description: "Программа А - минимальная установка"; Flags: iscustom // 0
Name: "amax"; Description: "Программа А - максимальная установка" // 1
Name: "xplug"; Description: "Plugin для программы Х" // 2
var
tNCLB: Array of TNewCheckListBox;
procedure CLOnClickCheck(Sender: TObject);
var
i,j: integer;
begin
for i:=0 to WizardForm.ComponentsList.Items.Count-1 do
WizardForm.ComponentsList.Checked[i] := False;
for i:=0 to tNCLB[WizardForm.TypesCombo.ItemIndex].Items.Count-1 do
for j:=0 to WizardForm.ComponentsList.Items.Count-1 do
if tNCLB[WizardForm.TypesCombo.ItemIndex].ItemObject[i] = WizardForm.ComponentsList.ItemObject[j] then
WizardForm.ComponentsList.Checked[j] := tNCLB[WizardForm.TypesCombo.ItemIndex].Checked[i];
end;
procedure TCOnChange(Sender: TObject);
var
i: integer;
begin
for i:=0 to WizardForm.TypesCombo.Items.Count-1 do
tNCLB[i].Hide;
tNCLB[WizardForm.TypesCombo.ItemIndex].Show;
CLOnClickCheck(Sender);
end;
procedure CopyCheckBoxs(intNum,intStart,indEnd: integer);
var
i: integer;
begin
with WizardForm.ComponentsList do
for i:=intStart to indEnd do
tNCLB[intNum].AddCheckBox(ItemCaption[i], ItemSubItem[i], ItemLevel[i], True, ItemEnabled[i], False, True, ItemObject[i]);
end;
procedure InitializeWizard();
var
i: integer;
begin
if WizardForm.TypesCombo.Items.Count > 1 then
with WizardForm do
begin
TypesCombo.OnChange := @TCOnChange;
ComponentsList.Hide;
with ComponentsList do
begin
SetLength(tNCLB,TypesCombo.Items.Count);
for i:=0 to WizardForm.TypesCombo.Items.Count-1 do
begin
tNCLB[i] := TNewCheckListBox.Create(WizardForm);
tNCLB[i].Parent := SelectComponentsPage;
tNCLB[i].Top := Top;
tNCLB[i].Left := Left;
tNCLB[i].Width := Width;
tNCLB[i].Height := Height;
tNCLB[i].OnClickCheck := @CLOnClickCheck;
tNCLB[i].Hide;
end;
// --- Костыли ---
// Программа А - минимальная установка
CopyCheckBoxs(0,0,2); // amin | programa, comp1, comp2
CopyCheckBoxs(0,5,6); // amin | comp5, comp6
// Программа А - максимальная установка
CopyCheckBoxs(1,0,4); // amax | programa, comp1, comp2, comp3, comp4
// Plugin для программы Х
CopyCheckBoxs(2,7,9); // xplug | pluginx, comp7, comp8
end;
tNCLB[0].Show;
end;
end;
[/no]