フォームと子コントロールの間でポップアップメニューを切り替える

フォームのPopupMenuプロパティに何らかのポップアップメニューを設定すると、フォームの子コントロール(TEditやTMemoなど)が備えている独自のポップアップメニューが表示されなくなってしまいます。それを避けるには、フォームのOnContextPopupイベントハンドラで、表示するポップアップメニューを切り替えます。例えば、次のようにします。
//---------------------------------------------------------------------------
void __fastcall Form1::FormContextPopup(TObject* ASender, TPoint& AMousePos, bool& AHandled)
{
        TControl* control = ControlAtPos(AMousePos, true, true);
        if(control == NULL) {
                PopupMenu = PopupMenu1;
        }
        else if(control->InheritsFrom(__classid(TEdit))) {
                PopupMenu = NULL;
        }
        else {
                PopupMenu = PopupMenu1;
        }
}
//---------------------------------------------------------------------------
最終更新: 2008-09-22

戻る