Inno Setup:如何在InitializeWizard中使用WizardForm.TasksList.Items?

时间:2017-06-21 18:35:28

标签: inno-setup

我在解决为什么我无法在InitializeWizard期间操纵任务复选框时遇到问题,但我可以使用CurPageChanged

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"
Name: "Option1"; Description: "Option1"

[Code]
procedure CurPageChanged(CurPageID: Integer);
var Index: Integer;
begin
  if CurPageID = wpSelectTasks then
  begin           
  Index := WizardForm.TasksList.Items.IndexOf('Option1');
  if Index <> -1 then    
    MsgBox('Touch device checkbox found.', mbInformation, MB_OK); { THIS WORKS!! }

  end;
end;

procedure InitializeWizard();
var Index: Integer;
begin
  Index := WizardForm.TasksList.Items.IndexOf('Option1');
  if Index <> -1 then    
    MsgBox('Touch device checkbox found.', mbInformation, MB_OK); { THIS DOES NOT WORK }
end;

我可以在WizardForm.TasksList.Items中使用InitializeWizard吗?我希望能够调用WizardForm.TasksList.Checked[Index] := False;或者可能禁用它,但我宁愿在初始化时执行它而不必避免调用代码,如果用户点击后退按钮并返回wpSelectTasks

1 个答案:

答案 0 :(得分:1)

因为任务列表是根据所选组件填充的。

因此,InitializeWizard中尚未知道任务列表。每当输入wpSelectTasks页面时,都会根据选择的组件(重新)生成任务列表。

因此,正如您发现的那样,最早的时刻,您可以使用TasksList CurPageChanged(wpSelectTasks)

取消选中任务时,请确保在用户返回任务页面时不取消选中该任务。实际上,你应该在第一次访问页面时取消选中它。