Inno Setup Снимите флажок с задачи, когда другая задача отмечена
Я пытаюсь перехватитьWizardForm.TasksList.OnClickCheck
событие, чтобы я мог снять задачу, когда другая задача выбрана. Я знаю, что в этой ситуации обычно используются радиокнопки, но автоматическая отмена одной задачи, когда выбрана другая, работает лучше из-за использования нескольких иерархических задач и того факта, что если используются радиокнопки, у вас всегда должна быть одна из два выбранных, когда наверху поддерева задачи. Пересоздание иерархии задач не представляется возможным для обеспечения согласованности, так как это включает две временные задачи, которые будут удалены в будущей версии программы установки. Я написал следующее, чтобы сделать это:
var
DefaultTasksClickCheck: TNotifyEvent;
{ Uncheck tasks based on what other tasks are selected }
procedure UpdateTasks();
var
intIndex: Integer;
begin
with WizardForm.TasksList do
begin
if IsTaskSelected('Task1') then
begin
intIndex := WizardForm.TasksList.Items.IndexOf('Task36 Description');
CheckItem(intIndex, coUncheck);
end;
if IsTaskSelected('Task36') then
begin
intIndex := WizardForm.TasksList.Items.IndexOf('Task1 Description');
CheckItem(intIndex, coUncheck);
end;
end;
end;
{ Update the task states if the task states change and restore the original event handler procedure }
procedure TasksClickCheck(Sender: TObject);
begin
DefaultTasksClickCheck(Sender);
UpdateTasks;
end;
procedure InitializeWizard();
begin
{ Store the original Tasks Page OnClickCheck event procedure and assign custom procedure }
DefaultTasksClickCheck := WizardForm.TasksList.OnClickCheck;
WizardForm.TasksList.OnClickCheck := @TasksClickCheck;
end;
Однако когда я запускаю код, я получаю:
Вне диапазона Proc
ошибка, при нажатии любого флажка, сDefaultTasksClickCheck(Sender);
выделена как оскорбительная строка. Если я закомментирую эту строку, я больше не получаю сообщение об ошибке, но, очевидно, больше не восстанавливаю исходный обработчик событий, и он по-прежнему не проверяет и не снимает флажки правильно, а Task36 не проверяется при проверке Task1. Что я сделал не так?