Inno setup Inno安装程序在TasksList.OnClickCheck事件中检测已更改的任务/项目
我被Inno setup Inno安装程序在TasksList.OnClickCheck事件中检测已更改的任务/项目,inno-setup,pascalscript,Inno Setup,Pascalscript,我被OnClickCheck属性的简单情况所困扰。问题是,我每次打开backup任务时都会看到Msgbox,但同时(当它打开时)OnClickCheck也会在按下uninst任务时出现!似乎OnClickCheck会检查所有单击,但我只需要检查第一个任务上的单击 在“WizardForm.TasksList.OnClickCheck”中添加任务的确切数量是合乎逻辑的(WizardForm.TasksList.OnClickCheck[0]),但编译器不同意 [任务] 名称:备份;描述:执行备份
OnClickCheck
属性的简单情况所困扰。问题是,我每次打开backup
任务时都会看到Msgbox
,但同时(当它打开时)OnClickCheck
也会在按下uninst
任务时出现!似乎OnClickCheck
会检查所有单击,但我只需要检查第一个任务上的单击
在“WizardForm.TasksList.OnClickCheck
”中添加任务的确切数量是合乎逻辑的(WizardForm.TasksList.OnClickCheck[0]
),但编译器不同意
[任务]
名称:备份;描述:执行备份
姓名:uninst ;;描述:不创建卸载程序
[守则]
程序TaskOnClick(发送方:TObject);
开始
如果选择了“备份”,则
开始
MsgBox('已检查备份任务',MB信息,MB_确定)
结束;
结束;
过程初始化Wizard();
开始
WizardForm.TasksList.OnClickCheck:=@TaskOnClick;
结束;
无法确切说明在OnClickCheck
事件中更改了哪些任务(列表项)
要知道用户选中了哪个项目,可以使用ItemIndex
属性。用户只能检查所选项目
但是,如果您有任务层次结构,安装程序甚至可以由于子/父项的更改而自动切换未选择的任务。因此,要告诉所有更改,您所能做的就是记住以前的状态,并在调用OnClickCheck
时将其与当前状态进行比较
var
TasksState:TCheckBoxState的数组;
程序任务ICKCheck(发送方:TObject);
变量
I:整数;
开始
对于I:=0到WizardForm.TasksList.Items.Count-1 do
开始
如果TasksState[I]向导Form.TasksList.State[I],则
开始
日志(格式('任务%d状态从%d更改为%d',
[I,TasksState[I],WizardForm.TasksList.State[I]];
TasksState[I]:=WizardForm.TasksList.State[I];
结束;
结束;
结束;
过程CurPageChanged(CurPageID:Integer);
变量
I:整数;
开始
如果CurPageID=wpSelectTasks,则
开始
{现在才初始化任务列表(例如,基于选定的设置}
{类型和组件)。记住当前/初始状态。}
SetArrayLength(TasksState、WizardForm.TasksList.Items.Count);
对于I:=0到WizardForm.TasksList.Items.Count-1 do
TasksState[I]:=WizardForm.TasksList.State[I];
结束;
结束;
过程初始化Wizard();
开始
WizardForm.TasksList.OnClickCheck:=@TasksClickCheck;
结束;
除了使用索引,还可以使用或来使用任务名称。有关示例,请参见
另见: