Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Есть вот такой код
Код: Выделить весь код
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

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 21-04-2011 в 17:22.


Отправлено: 17:16, 21-04-2011 | #1405