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()