ダブルクリック時の動作の変更

提供: RAD Studio
移動先: 案内検索

コンポーネント エディタの追加 への移動


コンポーネントがダブルクリックされると、対応するコンポーネント エディタの 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);
}
}