Есть вот такой код
Код:

var
kmp, gom, mpc, la, pot, pReg, aReg, kReg, gReg, mReg, lReg: Integer;
procedure CorCheck;
{ корректируем отмеченность радиобатонов }
var
i: Integer;
begin
for i := pReg to mReg do
if WizardForm.ComponentsList.ItemEnabled[i] then
begin
WizardForm.ComponentsList.ItemEnabled[aReg] := True;
WizardForm.ComponentsList.Checked[i] := True;
Break;
end;
end;
procedure CheckComponents;
var Correct: Boolean; xxx, ffdDesc, splittersDesc, AviSynthDesc : integer;
begin
Correct := True;
xxx := 0;
ffdDesc := WizardForm.ComponentsList.Items.IndexOf('{#ffdDesc}');
splittersDesc := WizardForm.ComponentsList.Items.IndexOf('{#splittersDesc}');
AviSynthDesc := WizardForm.ComponentsList.Items.IndexOf('{#AviSynthDesc}');
if (IsComponentSelected('pl\pot') and pot_in_rim) then begin
if ( (not ffdexist) and (not IsComponentSelected('ffd')) ) then begin
WizardForm.ComponentsList.Checked[ffdDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
if ( (not haaliexists) and (not IsComponentSelected('splitters')) ) then begin
WizardForm.ComponentsList.Checked[splittersDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[splittersDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
end
else begin
WizardForm.ComponentsList.ItemEnabled[splittersDesc]:=True;
if not IsComponentSelected('svp') then WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=True;
WizardForm.ComponentsList.Repaint;
end; //pl/pot
if IsComponentSelected('svp') then begin
if ( (not ffdexist) and (not IsComponentSelected('ffd')) ) then begin
WizardForm.ComponentsList.Checked[ffdDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
if ( (not avs) and (not IsComponentSelected('AviSynth')) ) then begin
WizardForm.ComponentsList.Checked[AviSynthDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[AviSynthDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
end
else begin
WizardForm.ComponentsList.ItemEnabled[AviSynthDesc]:=True;
if ((not IsComponentSelected('pl\pot')) and pot_in_rim) then WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=True;
WizardForm.ComponentsList.Repaint;
end; //svp
WizardForm.ComponentsList.Repaint;
//#if Full == True
{ узнаем порядковые номера наших компонентов... }
pot := WizardForm.ComponentsList.Items.IndexOf('{#potDesc}');
kmp := WizardForm.ComponentsList.Items.IndexOf('{#kmpDesc}');
gom := WizardForm.ComponentsList.Items.IndexOf('{#gomDesc}');
mpc := WizardForm.ComponentsList.Items.IndexOf('{#mpcDesc}');
la := WizardForm.ComponentsList.Items.IndexOf('{#laDesc}');
aReg := WizardForm.ComponentsList.Items.IndexOf('{#aDesc}');
if pot>=0 then begin pReg := WizardForm.ComponentsList.Items.IndexOf('{#pDesc}'); xxx := xxx + 1; end;
if kmp>=0 then begin kReg := WizardForm.ComponentsList.Items.IndexOf('{#kDesc}'); xxx := xxx + 1; end;
if gom>=0 then begin gReg := WizardForm.ComponentsList.Items.IndexOf('{#gDesc}'); xxx := xxx + 1; end;
if mpc>=0 then begin mReg := WizardForm.ComponentsList.Items.IndexOf('{#mDesc}'); xxx := xxx + 1; end;
if la>=0 then begin lReg := WizardForm.ComponentsList.Items.IndexOf('{#lDesc}'); xxx := xxx + 1; end;
{ сразу проверим, все ли интиресующие компоненты доступны... } //not WizardForm.ComponentsList.Checked[gom] and
// if (not WizardForm.ComponentsList.Checked[kmp] and not WizardForm.ComponentsList.Checked[mpc] and not WizardForm.ComponentsList.Checked[gom] and not WizardForm.ComponentsList.Checked[la] and not WizardForm.ComponentsList.Checked[pot]) then begin
//WizardForm.ComponentsList.Checked[kReg] := False; WizardForm.ComponentsList.ItemEnabled[kReg]:=False;
//WizardForm.ComponentsList.Checked[mReg] := False; WizardForm.ComponentsList.ItemEnabled[mReg]:=False;
//WizardForm.ComponentsList.Checked[gReg] := False; WizardForm.ComponentsList.ItemEnabled[gReg]:=False;
//WizardForm.ComponentsList.Checked[lReg] := False; WizardForm.ComponentsList.ItemEnabled[lReg]:=False;
if pot>=0 then begin if not WizardForm.ComponentsList.Checked[pot] then begin xxx := xxx - 1; end; end;
if kmp>=0 then begin if not WizardForm.ComponentsList.Checked[kmp] then begin xxx := xxx - 1; end; end;
if mpc>=0 then begin if not WizardForm.ComponentsList.Checked[mpc] then begin xxx := xxx - 1; end; end;
if gom>=0 then begin if not WizardForm.ComponentsList.Checked[gom] then begin xxx := xxx - 1; end; end;
if la>=0 then begin if not WizardForm.ComponentsList.Checked[la] then begin xxx := xxx - 1; end; end;
if xxx = 0 then begin
// MsgBox('xxx = ' + inttostr(xxx), mbInformation, MB_OK);
WizardForm.ComponentsList.Checked[aReg] := False; WizardForm.ComponentsList.ItemEnabled[aReg] := False;
end
// end;
{ в зависимости от того на кого кликнули, производим действия }
if pot>=0 then begin if WizardForm.ComponentsList.Checked[pot] then WizardForm.ComponentsList.ItemEnabled[pReg]:=True else WizardForm.ComponentsList.ItemEnabled[pReg]:=False; end;
if kmp>=0 then begin if WizardForm.ComponentsList.Checked[kmp] then WizardForm.ComponentsList.ItemEnabled[kReg]:=True else WizardForm.ComponentsList.ItemEnabled[kReg]:=False; end;
if mpc>=0 then begin if WizardForm.ComponentsList.Checked[mpc] then WizardForm.ComponentsList.ItemEnabled[mReg]:=True else WizardForm.ComponentsList.ItemEnabled[mReg]:=False; end;
if gom>=0 then begin if WizardForm.ComponentsList.Checked[gom] then WizardForm.ComponentsList.ItemEnabled[gReg]:=True else WizardForm.ComponentsList.ItemEnabled[gReg]:=False; end;
if la>=0 then begin if WizardForm.ComponentsList.Checked[la] then WizardForm.ComponentsList.ItemEnabled[lReg]:=True else WizardForm.ComponentsList.ItemEnabled[lReg]:=False; end;
case WizardForm.ComponentsList.ItemIndex of
kmp: ; gom: ; mpc: ; la: ; pot: ;
else Correct := False;
end;
if Correct then
CorCheck;
{ перерисуем лист компонентов }
// #endif
WizardForm.ComponentsList.Repaint;
end;
procedure ComponentOnClick(Sender: TObject);
begin
CheckComponents;
if WizardSelectedComponents(False) = '' then WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
WizardForm.ComponentsList.Repaint;
end;
procedure InitializeWizard();
WizardForm.ComponentsList.OnClick := @ComponentOnClick;
делает важную весчь
1. ставит галки на компоненты если компонент* нужен проге а в системе нету и засвечивает чтобы не сняли, если с компонента* снять выбор - нужные компоненты становятся для свободного выбора.
2. также делает доступным или недоступным пункт для регистрации файлов на плеер, если плеер не выбран пункт регистрации файлов на него просто засвечивается.
Вторая часть робит (ну еще бы, Серега делал

), в вот первая сбоит - сразу при запуске {#AviSynthDesc} не засвечен но выбран, если щелкнуть по нему - он засвечивается, а вот {#ffdDesc} галка легко снимается и ставится, пока с четвертого щелчка не застветится.
Где я накосячил?
для svp нужен ffd и avisynth, для pot нужен ffd и splitters