Inno Setup Desmarque uma tarefa quando outra tarefa estiver marcada
Estou tentando interceptar oWizardForm.TasksList.OnClickCheck
evento para que eu possa desmarcar uma tarefa quando outra tarefa for selecionada. Eu sei que normalmente os botões de opção seriam usados nessa situação, mas desmarcar automaticamente uma tarefa quando outra é selecionada funciona melhor aqui devido ao uso de várias tarefas hierárquicas e ao fato de que, se os botões de opção forem usados, você sempre precisará de um os dois selecionados quando estão no topo da subárvore da tarefa. Não é possível redesenhar a hierarquia de tarefas para manter a consistência, pois isso inclui duas tarefas temporárias que serão removidas em uma versão futura do instalador. Escrevi o seguinte para fazer isso:
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;
No entanto, quando executo o código, recebo um:
Fora da faixa de proc
erro, ao clicar em qualquer caixa de seleção, comDefaultTasksClickCheck(Sender);
destacada como a linha incorreta. Se eu comentar esta linha, não receberei mais o erro, mas obviamente não restaurarei mais o manipulador de eventos original e ele ainda não verifica e desmarca as tarefas corretamente, com a Tarefa36 desmarcável quando a Tarefa1 está marcada. O que eu fiz errado?