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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage