WizardForm.TasksList.OnClickCheck
イベントを傍受しようとしています。別のタスクが選択されたときにタスクのチェックを外すことができます。私は通常のラジオボタンがこの状況で使用されることを知っていますが、別のものが選択されたときに自動的に1つのタスクのチェックを外すのは、複数の階層的なタスクの使用とラジオボタンを使用すると、 2つはタスクサブツリーの先頭にあるときに選択されます。一貫性を維持するために、タスク階層を再設計することは現実的ではありません。これは、インストーラの将来のバージョンで削除される2つの一時的なタスクを含めるためです。すべてのチェックボックスをクリックすると、Inno Setup別のタスクがチェックされているときにタスクのチェックを外す
PROC範囲外エラー:私は、コードを実行したときしかし、私が手
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;
:私はこれを行うには、次を書かれています、DefaultTasksClickCheck(Sender);
が違反行として強調表示されています。この行をコメントアウトするとエラーは発生しなくなりますが、もはや元のイベントハンドラを元に戻すことはなくなり、Task1をチェックするとTask36をチェックしないようにしてタスクを正しくチェックしたりチェックを外したりしません。私は何を間違えたのですか?
ありがとうございました。それはエラーを説明します。しかし、CheckItem(intIndex、coUncheck);または 'WizardForm.TasksList.Checked [intIndex]:= False; 'を使用するかどうかにかかわらず、チェック解除は正しく機能しません。 Task1をチェックすると、Task36は常にチェックが外されます。 –
私は答えを完了しました。 –