ショートカットキーの処理者を切り替える

複数のコントロール間でショートカットキーが衝突する時など、ショートカットキーの処理者を切り替えるには、フォームのIsShortCut関数をオーバーライドします。例えば、次のようにします。
//---------------------------------------------------------------------------
bool __fastcall TForm1::IsShortCut(TWMKey& AMessage)
{
        TShortCut shortCut;
        {
                TShiftState shiftState;
                if(GetAsyncKeyState(VK_SHIFT) < 0) {
                        shiftState << ssShift;
                }
                if(GetAsyncKeyState(VK_CONTROL) < 0) {
                        shiftState << ssCtrl;
                }
                if(GetAsyncKeyState(VK_MENU) < 0) {
                        shiftState << ssAlt;
                }
                shortCut = ShortCut(AMessage.CharCode, shiftState);
        }
        TMenu* menus[] = {MainMenu, PopupMenu};
        for(int i = 0; i < sizeof(menus) / sizeof(TMenu*); i++) {
                if(menus[i] == NULL) {
                        continue;
                }
                TMenuItem* menuItem = menus[i]->FindItem(shortCut, fkShortCut);
                if(menuItem == NULL || !menuItem->Enabled) {
                        continue;
                }
                menuItem->Click();
                return true;
        }
        return false;
}
//---------------------------------------------------------------------------
最終更新: 2008-07-04

戻る