如何使新添加的复选框与任务一起工作?

How to make work the new added checkboxes with the tasks?

我在我的 inno 设置任务页面中添加了新的复选框,但我不知道如何让它们与任务一起工作,我希望它们与脚本中的 [Tasks] 区域一起工作。

[Tasks]
Name: "Newcheckboox1"; Description: "Newcheckbox1"; MinVersion: 0.0,5.0
Name: "Newcheckboox2"; Description: "Newcheckbox2"; MinVersion: 0.0,5.0
other tasks checkboxes here.........

这里是一张图片:

这里是添加复选框时生成的代码:

[Code]
{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
  NewGroupBox1: TNewGroupBox;
  NewCheckBox1: TNewCheckBox;
  NewCheckBox2: TNewCheckBox;
  NewCheckBox3: TNewCheckBox;
  NewGroupBox2: TNewGroupBox;
  NewCheckBox4: TNewCheckBox;
  NewCheckBox5: TNewCheckBox;
  NewGroupBox3: TNewGroupBox;
  NewCheckBox6: TNewCheckBox;
  NewCheckBox7: TNewCheckBox;
  NewCheckBox8: TNewCheckBox;

procedure RedesignWizardForm;
begin
  with WizardForm.SelectTasksLabel do
  begin
    Visible := False;
    Left := ScaleX(392);
  end;

  { NewGroupBox1 }
  NewGroupBox1 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox1 do
  begin
    Parent := WizardForm.SelectTasksPage;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(145);
    Height := ScaleY(238);
    Caption := 'NewGroupBox1';
  end;

  { NewCheckBox1 }
  NewCheckBox1 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox1 do
  begin
    Parent := NewGroupBox1;
    Left := ScaleX(8);
    Top := ScaleY(16);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox1';
  end;

  { NewCheckBox2 }
  NewCheckBox2 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox2 do
  begin
    Parent := NewGroupBox1;
    Left := ScaleX(8);
    Top := ScaleY(40);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox2';
  end;

  { NewCheckBox3 }
  NewCheckBox3 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox3 do
  begin
    Parent := NewGroupBox1;
    Left := ScaleX(8);
    Top := ScaleY(64);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox3';
  end;

  NewCheckBox1.TabOrder := 0;
  NewCheckBox2.TabOrder := 1;
  NewCheckBox3.TabOrder := 2;

  { NewGroupBox2 }
  NewGroupBox2 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox2 do
  begin
    Parent := WizardForm.SelectTasksPage;
    Left := ScaleX(152);
    Top := ScaleY(0);
    Width := ScaleX(265);
    Height := ScaleY(97);
    Caption := 'NewGroupBox2';
  end;

  { NewCheckBox4 }
  NewCheckBox4 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox4 do
  begin
    Parent := NewGroupBox2;
    Left := ScaleX(8);
    Top := ScaleY(16);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox4';
  end;

  { NewCheckBox5 }
  NewCheckBox5 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox5 do
  begin
    Parent := NewGroupBox2;
    Left := ScaleX(8);
    Top := ScaleY(40);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox5';
  end;

  NewCheckBox4.TabOrder := 0;
  NewCheckBox5.TabOrder := 1;

  { NewGroupBox3 }
  NewGroupBox3 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox3 do
  begin
    Parent := WizardForm.SelectTasksPage;
    Left := ScaleX(152);
    Top := ScaleY(96);
    Width := ScaleX(265);
    Height := ScaleY(142);
    Caption := 'NewGroupBox3';
  end;

  { NewCheckBox6 }
  NewCheckBox6 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox6 do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(16);
    Top := ScaleY(24);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox6';
  end;

  { NewCheckBox7 }
  NewCheckBox7 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox7 do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(16);
    Top := ScaleY(48);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox7';
  end;

  { NewCheckBox8 }
  NewCheckBox8 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox8 do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(16);
    Top := ScaleY(72);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox8';
  end;

  NewCheckBox6.TabOrder := 0;
  NewCheckBox7.TabOrder := 1;
  NewCheckBox8.TabOrder := 2;

  NewGroupBox1.TabOrder := 2;
  NewGroupBox2.TabOrder := 3;
  NewGroupBox3.TabOrder := 4;

{ ReservationBegin }
  // This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

OnClickCheck 事件添加方法,

procedure InitializeWizard;
begin
    WizardForm.TasksList.OnClickCheck := @TasksListClickCheck
end;

然后执行TasksListClickCheck方法,

procedure TasksListClickCheck(Sender: TObject);
begin
    /** Do whatever you want here **/
end;

你不能"make them work with Tasks"。那没有意义。 Tasks 的唯一目的是在 "Select Additional Tasks" 页面上自动创建复选框。当您以编程方式创建复选框时,Tasks 不会再给您任何东西。

如果您想将自定义复选框用作 Tasks,请使用Check parameter,而不是Tasks

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Check: IsCustomTask1Selected

[Code]

var
  NewCheckBox1: TNewCheckBox;

function IsCustomTask1Selected: Boolean;
begin
  Result := NewCheckBox1.Checked;
end;

有关完整的解决方案,请参阅

它适用于最新版本的正确 Inno Setup,不需要来源可疑的 Inno Setup 的过时自定义构建。


旁注:

  • 我建议您对单个复选框使用 TNewCheckListBox,而不是 TNewGroupBox
  • 5.5.1 是非常旧的版本,存在许多安全问题。