ダブルクリック時の動作の変更
コンポーネント エディタの追加 への移動
コンポーネントがダブルクリックされると、対応するコンポーネント エディタの Edit メソッドが呼び出されます。デフォルトでは、Edit メソッドは、コンテキスト メニューに追加されている最初のコマンドを実行します。したがって、「コマンドの実装」の例では、コンポーネントをダブルクリックすると、DoThis コマンドが実行されます。
最初のコマンドを実行するということで通常は十分ですが、このデフォルトの動作を変更したい場合もあります。たとえば、次のような場合には、別の動作をさせることができます。
- コンテキスト メニューにコマンドをまったく追加しない場合
- コンポーネントがダブルクリックされたときに、複数のコマンドを組み合わせたダイアログを表示する場合
Edit メソッドをオーバーライドすると、コンポーネントがダブルクリックされたときの新しい動作を指定できます。たとえば、次の Edit メソッドの場合は、ユーザーがコンポーネントをダブルクリックすると、フォント ダイアログが開きます。
procedure TMyEditor.Edit; var FontDlg: TFontDialog; begin FontDlg := TFontDialog.Create(Application); try if FontDlg.Execute then MyComponent.FFont.Assign(FontDlg.Font); finally FontDlg.Free end; end;
void __fastcall TMyEditor::Edit(void) { TFontDialog *pFontDlg = new TFontDialog(NULL); pFontDlg->Execute(); ((TMyComponent *)Component)->Font = pFontDlg->Font; delete pFontDlg; }
メモ: コンポーネントをダブルクリックしてイベント ハンドラのコード エディタを表示させる場合は、コンポーネント エディタの基底クラスとして、TComponentEditor ではなく TDefaultEditor を使用します。次に、Edit メソッドではなく、protected メソッドの TDefaultEditor.EditProperty をオーバーライドします。EditProperty では、そのコンポーネントのイベント ハンドラを調べ、最初に見つかったものを表示します。この動作を変更して、特定のイベントを探すこともできます。次に例を示します。
procedure TMyEditor.EditProperty(PropertyEditor: TPropertyEditor; Continue, FreeEditor: Boolean) begin if (PropertyEditor.ClassName = 'TMethodProperty') and (PropertyEditor.GetName = 'OnSpecialEvent') then // DefaultEditor.EditProperty(PropertyEditor, Continue, FreeEditor); end;
void __fastcall TMyEditor::EditProperty(TPropertyEditor* PropertyEditor, bool &Continue, bool &FreeEditor) { if (PropertyEditor->ClassNameIs("TMethodProperty") && CompareText(PropertyEditor->GetName, "OnSpecialEvent") == 0) { TDefaultEditor::EditProperty(PropertyEditor, Continue, FreeEditor); } }