Lex_from_Belarus, либо я не догоняю либо код для выбора всех компонентов не дружит со свёрнутым деревом компонентов
в любом случае оптимизировал процедуру выбора и очиски выбора всех компонентов и ответил на вопрос в твоём последнем сообщении:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
DirExistsWarning=no
[Components]
Name: a; Description: -Компонент 1;
Name: a\a; Description: --Компонент 1.1;
Name: a\b; Description: --Компонент 1.2;
Name: b; Description: -Компонент 2;
Name: b\d; Description: --Компонент 2.1;
Name: b\e; Description: --Компонент 2.2;
Name: b\f; Description: --Компонент 2.3;
Name: b\e; Description: --Компонент 2.4;
[ code]
procedure ComponentsOnClick(Sender: TObject);
begin
with WizardForm.ComponentsList do
begin
// Как сделать чтобы если выбран 1.1 то доступны для выбора были 2.1 и 2.2, а если выбрано 1.2, то доступны стали 2.3 и 2.4
ItemEnabled[Items.IndexOf('--Компонент 2.1')] := Checked[Items.IndexOf('--Компонент 1.1')];
ItemEnabled[Items.IndexOf('--Компонент 2.2')] := Checked[Items.IndexOf('--Компонент 1.1')];
ItemEnabled[Items.IndexOf('--Компонент 2.3')] := Checked[Items.IndexOf('--Компонент 1.2')];
ItemEnabled[Items.IndexOf('--Компонент 2.4')] := Checked[Items.IndexOf('--Компонент 1.2')];
// И соответственно при нажатии на 1.1 или 1.2 происходил выбор 2.1 или 2.3 соответственно
if Checked[Items.IndexOf('--Компонент 1.1')] then Checked[Items.IndexOf('--Компонент 2.1')] := True;
if Checked[Items.IndexOf('--Компонент 1.2')] then Checked[Items.IndexOf('--Компонент 2.3')] := True;
Refresh;
end;
end;
procedure btnClick(Sender: TObject);
var
i: Byte;
Check: Boolean;
begin
Check := TButton(Sender).Caption = 'Все';
for i := 0 to WizardForm.ComponentsList.Items.Count-1 do WizardForm.ComponentsList.Checked[i] := Check;
WizardForm.ComponentsList.OnClickCheck(nil);
end;
procedure InitializeWizard();
var
i, k: Byte;
begin
for i:= 0 to 1 do with TButton.Create(WizardForm) do
begin
Parent:= WizardForm.SelectComponentsPage;
SetBounds(ScaleX(295+k), ScaleY(210), ScaleX(60), ScaleY(25));
OnClick := @btnClick;
case i of
0: Caption:= 'Все';
1: Caption:= 'Ничего';
end;
k:= 62;
end;
WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClick;
WizardForm.ComponentsList.OnClickCheck(nil);
end;