Inno Setupインストーラのコンポーネント一覧は19種類あり、のイベントをONEに設定したいと思います。これを行う方法はありますか?または、すべてのコンポーネントに対して設定されている場合、どのコンポーネントがOnClick
イベントをトリガしたかを確認する方法はありますか?Inno Setup ComponentsList OnClickイベント
は現在、OnClick
イベントがそうのように設定されている:TNewCheckListBox
Inno Setupインストーラのコンポーネント一覧は19種類あり、のイベントをONEに設定したいと思います。これを行う方法はありますか?または、すべてのコンポーネントに対して設定されている場合、どのコンポーネントがOnClick
イベントをトリガしたかを確認する方法はありますか?Inno Setup ComponentsList OnClickイベント
は現在、OnClick
イベントがそうのように設定されている:TNewCheckListBox
OnClick
を使用しない場合は、代わりにOnClickChange
を使用してください。
OnClick
は、チェック状態(項目外のクリック、固定項目のクリック、キーボードによる選択変更など)を変更しないクリックに対して呼び出されますが、主にキーボードを使用したチェックは呼び出されません。
OnClickChange
は、チェック状態が変更された場合にのみ呼び出され、キーボードとマウスの両方については呼び出されます。
ユーザーがチェックしたアイテムを確認するには、ItemIndex
プロパティを使用します。ユーザーは選択した項目のみを確認できます。
コンポーネント階層またはセットアップタイプの場合、子/親アイテムの変更またはセットアップタイプの変更によりインストーラによって自動的にチェックされるアイテムは、OnClickCheck
(またはOnClick
も) 。したがって、すべての変更を伝えるには、WizardForm.ComponentsList.OnClickCheck
またはWizardForm.TypesCombo.OnChange
が呼び出されたときに、以前の状態を覚えて現在の状態と比較するだけです。より一般的なソリューションについては
const TheItem = 2; { the item you are interested in } var PrevItemChecked: Boolean; TypesComboOnChangePrev: TNotifyEvent; procedure ComponentsListCheckChanges; var Item: string; begin if PrevItemChecked <> WizardForm.ComponentsList.Checked[TheItem] then begin Item := WizardForm.ComponentsList.ItemCaption[TheItem]; if WizardForm.ComponentsList.Checked[TheItem] then begin Log(Format('"%s" checked', [Item])); end else begin Log(Format('"%s" unchecked', [Item])); end; PrevItemChecked := WizardForm.ComponentsList.Checked[TheItem]; end; end; procedure ComponentsListClickCheck(Sender: TObject); begin ComponentsListCheckChanges; end; procedure TypesComboOnChange(Sender: TObject); begin { First let Inno Setup update the components selection } TypesComboOnChangePrev(Sender); { And then check for changes } ComponentsListCheckChanges; end; procedure InitializeWizard(); begin WizardForm.ComponentsList.OnClickCheck := @ComponentsListClickCheck; { The Inno Setup itself relies on the WizardForm.TypesCombo.OnChange, } { so we have to preserve its handler. } TypesComboOnChangePrev := WizardForm.TypesCombo.OnChange; WizardForm.TypesCombo.OnChange := @TypesComboOnChange; { Remember the initial state } { (by now the components are already selected according to } { the defaults or the previous installation) } PrevItemChecked := WizardForm.ComponentsList.Checked[TheItem]; end;
、Inno Setup Detect changed task/item in TasksList.OnClickCheck eventを参照してください。コンポーネントでは、WizardForm.TypesCombo.OnChange
コールのチェックをトリガする必要があります。
:
WizardForm.ComponentList
は次のように宣言されているWizardform.ComponentsList.Items[x].OnClick := @DbCheckChange;
:
Wizardform.ComponentsList.OnClick := @CheckChange;
のように私が何かをしたいと思いますまたは、すべてのコンプに設定されている場合、どのコンポーネントがonclickイベントをトリガーしたかをチェックする方法がありますonents?
ほとんどのコンポーネントイベントは、イベントを発生させているコンポーネントオブジェクトを指すためにSender
パラメータを持っています。ただし、この場合、Sender
はおそらくComponentsList
になります。 ComponentsList
が実際に(TListBox
など)として宣言されているかどうかに応じて、現在選択/クリックされている項目を指定するプロパティを持つことがあります(ItemIndex
など)。あるいは、アイテムごとのクリック数を報告する別々のイベントを持つことさえできます。あなたは何がComponentsList
として宣言されているかは言わなかったので、ここでは誰もあなたに何を探すべきかを正確に伝えることはできません。
リストは「TNewCheckListBox」 –
です。大変ありがとうございます。 –