Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Аватара для nik1967

Старожил


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

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


Chudmin,
Три варианта

Первый: самый простой, но через секцию Components

Код: Выделить весь код
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Types]
Name: full; Description: Full installation; Flags: iscustom;

[Components]
Name: Check0; Description: "Стандартные иконки в стиле Win 7"; Flags: exclusive;  Types: full;
Name: Check1; Description: "Стандартные иконки в стиле Win 10"; Flags: exclusive;
Name: Check2; Description: "Станадартные иконки в стиле Win 7 + Win 10"; Flags: exclusive;
Name: Check3; Description: "Дополнительные иконки в стиле Win 7"; Flags: exclusive;

[Files]
Source: "Win_7.txt"; DestDir: "{app}"; Components: Check0;
Source: "Win_10.txt"; DestDir: "{app}"; Components: Check1;
Source: "Win_10_2.txt"; DestDir: "{app}"; Components: Check2;
Source: "Dop_Win_7.txt"; DestDir: "{app}"; Components: Check3;

Второй: если все же нужны чекбосы, а не радиобаттоны

Код: Выделить весь код
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Tasks]
Name: desktopicon; Description: "Create a &desktop icon";

[Files]
Source: "Win_7.txt"; DestDir: "{app}"; Check: Check_0;
Source: "Win_10.txt"; DestDir: "{app}"; Check: Check_1;
Source: "Win_10_2.txt"; DestDir: "{app}"; Check: Check_2;
Source: "Dop_Win_7.txt"; DestDir: "{app}"; Check:Check_3;

[Code]
var
  Check: array [0..3] of TCheckBox;

function Check_0(): Boolean;
begin
  Result:= Check[0].Checked;
end;

function Check_1(): Boolean;
begin
  Result:= Check[1].Checked;
end;

function Check_2(): Boolean;
begin
  Result:= Check[2].Checked;
end;

function Check_3(): Boolean;
begin
  Result:= Check[3].Checked;
end;

procedure Check0(Sender: TObject);
begin
  if Check[0].Checked then begin
    Check[1].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[0].Checked:= True;
end;

procedure Check1(Sender: TObject);
begin
  if Check[1].Checked then begin
    Check[0].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[1].Checked := True;
end;

procedure Check2(Sender: TObject);
begin
  if Check[2].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[3].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[2].Checked:= True;
end;

procedure Check3(Sender: TObject);
begin
  if Check[3].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[2].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[3].Checked:= True;
end;

procedure InitializeWizard();
begin
  Check[0]:= TCheckBox.Create(WizardForm);
  with Check[0] do begin
    Parent:= WizardForm.SelectTasksPage;
    Checked:= True;
    Left:=ScaleX(4);
    Top:= ScaleY(90);
    Width:=ScaleX(280);
    OnClick:= @Check0;
    // Будет Win_7.txt
    Caption:= ' Стандартные иконки в стиле Win 7';
  end;

  Check[1]:= TCheckBox.Create(WizardForm);
  with Check[1] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(115);
    Width:=ScaleX(280);
    OnClick:= @Check1;
    // Будет Win_10.txt
    Caption:= ' Стандартные иконки в стиле Win 10';
  end;

  Check[2]:= TCheckBox.Create(WizardForm);
  with Check[2] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(140);
    Width:=ScaleX(350);
    OnClick:= @Check2;
    // Будет Win_10_2.txt
    Caption:= ' Станадартные иконки в стиле Win 7 + Win 10';
  end;

  Check[3]:= TCheckBox.Create(WizardForm);
  with Check[3] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(165);
    Width:=ScaleX(280);
    OnClick:= @Check3;
    // Будет Dop_Win_7.txt
    Caption:= ' Дополнительные иконки в стиле Win 7';
  end;
end;

Третий: если все же нужны чекбосы, а не радиобаттоны, другая реализация

Код: Выделить весь код
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Tasks]
Name: desktopicon; Description: "Create a &desktop icon";

[Code]
var
  Check: array [0..3] of TCheckBox;

procedure Check0(Sender: TObject);
begin
  if Check[0].Checked then begin
    Check[1].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[0].Checked:= True;
end;

procedure Check1(Sender: TObject);
begin
  if Check[1].Checked then begin
    Check[0].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[1].Checked := True;
end;

procedure Check2(Sender: TObject);
begin
  if Check[2].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[3].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[2].Checked:= True;
end;

procedure Check3(Sender: TObject);
begin
  if Check[3].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[2].Checked:= False;
  end;

  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[3].Checked:= True;
end;

procedure InitializeWizard();
begin
  Check[0]:= TCheckBox.Create(WizardForm);
  with Check[0] do begin
    Parent:= WizardForm.SelectTasksPage;
    Checked:= True;
    Left:=ScaleX(4);
    Top:= ScaleY(90);
    Width:=ScaleX(280);
    OnClick:= @Check0;
    // Будет Win_7.txt
    Caption:= ' Стандартные иконки в стиле Win 7';
  end;

  Check[1]:= TCheckBox.Create(WizardForm);
  with Check[1] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(115);
    Width:=ScaleX(280);
    OnClick:= @Check1;
    // Будет Win_10.txt
    Caption:= ' Стандартные иконки в стиле Win 10';
  end;

  Check[2]:= TCheckBox.Create(WizardForm);
  with Check[2] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(140);
    Width:=ScaleX(350);
    OnClick:= @Check2;
    // Будет Win_10_2.txt
    Caption:= ' Станадартные иконки в стиле Win 7 + Win 10';
  end;

  Check[3]:= TCheckBox.Create(WizardForm);
  with Check[3] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(165);
    Width:=ScaleX(280);
    OnClick:= @Check3;
    // Будет Dop_Win_7.txt
    Caption:= ' Дополнительные иконки в стиле Win 7';
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpFinished: begin
      if Check[0].Checked then FileCopy(ExpandConstant('{src}\Win_7.txt'), ExpandConstant('{app}\Win_7.txt'), false);
      if Check[1].Checked then FileCopy(ExpandConstant('{src}\Win_10.txt'), ExpandConstant('{app}\Win_10.txt'), false);
      if Check[2].Checked then FileCopy(ExpandConstant('{src}\Win_10_2.txt'), ExpandConstant('{app}\Win_10_2.txt'), false);
      if Check[3].Checked then FileCopy(ExpandConstant('{src}\Dop_Win_7.txt'), ExpandConstant('{app}\Dop_Win_7.txt'), false);
    end;
  end;
end;

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:25, 19-11-2018 | #143