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

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

Аватара для ErikPshat

Пользователь


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

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


nik1967, в ообщем я сделал вот такую реализацию своей идеи, можете заценить и указать на ошибки:

Готовый примар реализации чекбоксов на странице выбора папки:
Код: Выделить весь код
#define   Name       "MyAppName"
#define   Version    "1.0 Build 1234"

[Setup]
AppName={#Name}
AppVersion={#Version}
DefaultDirName={src}

;[Files]
;Source: "{app}\4GB.txt"; DestDir: "{app}"; Check: Check0();
;Source: "{app}\2GB.txt"; DestDir: "{app}"; Check: Check1();
;Source: "{app}\NoLimit.txt"; DestDir: "{app}"; Check: Check2();
;Source: "{app}\Signed.txt"; DestDir: "{app}"; Check: Check3();

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[Messages]
ru.WizardSelectDir=Выбор папки для разделения
ru.SelectDirDesc=Какую папку вы хотите разделить на части и упаковать их в PKG?
ru.SelectDirLabel3=Программа разделит выбранную папку на части по размерам,%nв зависимости от сделанного вами выбора в чекбоксах.
ru.SelectDirBrowseLabel=Для выбора папки, которую вам необходимо разделить, нажмите «Обзор».
ru.DiskSpaceMBLabel=Требуется как минимум 2 или 4 ГБ свободного дискового пространства.

[CustomMessages]
ru.Check4GB=Разделить папку на части по 4 Гигабайта
ru.Check2GB=Разделить папку на части по 2 Гигабайта
ru.CheckNot=Не разделять папку, упаковать целиком
ru.CheckSig=Подписать PKG (создать "retail_signed.pkg")

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

function Check0(): boolean; begin Result := Check[0].Checked; end;
function Check1(): boolean; begin Result := Check[1].Checked; end;
function Check2(): boolean; begin Result := Check[2].Checked; end;
function Check3(): boolean; begin Result := Check[3].Checked; end;

procedure GetCheck(Sender: TObject);
begin
  case sender of
    Check[0]: if Check[0].Checked then begin Check[1].Checked := False; Check[2].Checked := False; end;
    Check[1]: if Check[1].Checked then begin Check[2].Checked := False; Check[0].Checked := False; end;
    Check[2]: if Check[2].Checked then begin Check[1].Checked := False; Check[0].Checked := False; end;
  end;
end;

procedure InitializeWizard();
begin
  Check[0] := TCheckBox.Create(WizardForm);
  with Check[0] do
  begin
    Parent := WizardForm.SelectDirPage;
    Checked := True;
    Left:= ScaleX(4);
    Top := ScaleY(115);
    Width:=ScaleX(280);
    OnClick := @GetCheck;
    // Будет 4GB.txt, если имеется в них необходимость, нужно раскомментировать их в секции [Files]
    Caption := ExpandConstant(' {cm:Check4GB}');
  end;

  Check[1] := TCheckBox.Create(WizardForm);
  with Check[1] do
  begin
    Parent := WizardForm.SelectDirPage;
    Left:= ScaleX(4);
    Top := ScaleY(135);
    Width:=ScaleX(280);
    OnClick := @GetCheck;
    // Будет 2GB.txt, если имеется в них необходимость, нужно раскомментировать их в секции [Files]
    Caption := ExpandConstant(' {cm:Check2GB}');
  end;

  Check[2] := TCheckBox.Create(WizardForm);
  with Check[2] do
  begin
    Parent := WizardForm.SelectDirPage;
    Left:= ScaleX(4);
    Top := ScaleY(155);
    Width:=ScaleX(350);
    OnClick := @GetCheck;
    // Будет NoLimit.txt, если имеется в них необходимость, нужно раскомментировать их в секции [Files]
    Caption := ExpandConstant(' {cm:CheckNot}');
  end;

  Check[3] := TCheckBox.Create(WizardForm);
  with Check[3] do
  begin
    Parent := WizardForm.SelectDirPage;
    Left:= ScaleX(4);
    Top := ScaleY(185);
    Width:=ScaleX(280);
    // Будет Signed.txt, если имеется в них необходимость, нужно раскомментировать их в секции [Files]
    Caption := ExpandConstant(' {cm:CheckSig}');
  end;
end;

Только какие потом отлавливать переменные я пока не придумал )))
  • Выбранная папка вроде: {#AppName}
  • Выбранный чекбокс как-то так: Check()

Отправлено: 19:52, 20-11-2018 | #152