Inno Setup Deaktivieren Sie eine Aufgabe, wenn eine andere Aufgabe markiert ist
Ich versuche das @ abzufangWizardForm.TasksList.OnClickCheck
event, damit ich eine Aufgabe deaktivieren kann, wenn eine andere Aufgabe ausgewählt ist. Ich weiß, dass in dieser Situation normalerweise Optionsfelder verwendet werden, aber das automatische Deaktivieren einer Aufgabe bei Auswahl einer anderen Aufgabe funktioniert hier besser, da mehrere hierarchische Aufgaben verwendet werden und wenn Optionsfelder verwendet werden, muss immer eine von ihnen vorhanden sein Die beiden werden oben im Teilbaum der Aufgabe ausgewählt. Eine Neugestaltung der Aufgabenhierarchie ist aus Gründen der Konsistenz nicht möglich, da dies zwei temporäre Aufgaben umfasst, die in einer zukünftigen Version des Installationsprogramms entfernt werden. Ich habe dazu folgendes geschrieben:
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;
Wenn ich den Code ausführe, erhalte ich jedoch ein:
Out of Proc Range
Fehler, wenn Sie auf ein Kontrollkästchen klicken, mitDefaultTasksClickCheck(Sender);
als störende Zeile markiert. Wenn ich diese Zeile auskommentiere, wird der Fehler nicht mehr angezeigt, der ursprüngliche Ereignishandler wird jedoch offensichtlich nicht mehr wiederhergestellt, und die Aufgaben werden immer noch nicht richtig überprüft und deaktiviert, wobei Task36 deaktiviert ist, wenn Task1 aktiviert ist. Was habe ich falsch gemacht