检测 TasksList.OnClickCheck 事件中更改的 Inno Setup 任务/项目

问题描述 投票:0回答:1

我陷入了具有

OnClickCheck
属性的简单情况。问题是,每次打开
Msgbox
任务时,我都会看到
backup
,而且(在打开时)按下
OnClickCheck
任务时也会出现
uninst
!似乎
OnClickCheck
检查所有点击,但我只需要检查第一个任务的点击。

添加到

WizardForm.TasksList.OnClickCheck
确切的任务数量(
WizardForm.TasksList.OnClickCheck[0]
)是合乎逻辑的,但编译器不同意它。

[Tasks]
Name: backup; Description: do backup
Name: uninst; Description: do not create uninstaller
[Code]

procedure TaskOnClick(Sender: TObject); 
begin
  if IsTaskSelected('backup') then 
  begin
    MsgBox('backup task has been checked.', mbInformation, MB_OK) 
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.TasksList.OnClickCheck := @TaskOnClick;
end;
inno-setup pascalscript
1个回答
4
投票

无法准确判断

OnClickCheck
事件中更改了哪些任务(列表项)。

要了解用户检查了哪个项目,您可以使用

ItemIndex
属性。用户只能检查所选项目。

尽管如果您有任务层次结构,由于子/父项目的更改,即使未选择的任务也可以由安装程序自动切换。因此,要告诉所有更改,您所能做的就是记住以前的状态并将其与当前状态进行比较,当调用

OnClickCheck
时。

var
  TasksState: array of TCheckBoxState;

procedure TasksClickCheck(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to WizardForm.TasksList.Items.Count - 1 do
  begin
    if TasksState[I] <> WizardForm.TasksList.State[I] then
    begin
      Log(Format('Task %d state changed from %d to %d',
                 [I, TasksState[I], WizardForm.TasksList.State[I]]));
      TasksState[I] := WizardForm.TasksList.State[I];
    end;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  I: Integer;
begin
  if CurPageID = wpSelectTasks then
  begin
    { Only now is the task list initialized (e.g. based on selected setup }
    { type and components). Remember what is the current/initial state. }
    SetArrayLength(TasksState, WizardForm.TasksList.Items.Count);
    for I := 0 to WizardForm.TasksList.Items.Count - 1 do
      TasksState[I] := WizardForm.TasksList.State[I];
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.TasksList.OnClickCheck := @TasksClickCheck;
end;

除了使用索引之外,您还可以通过

WizardSelectedTasks
WizardIsTaskSelected
来使用任务名称。有关示例,请参阅 Inno Setup:如果选择了另一个组件,如何自动选择一个组件?


另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.