ショートカットキーの処理者を切り替える
複数のコントロール間でショートカットキーが衝突する時など、ショートカットキーの処理者を切り替えるには、フォームの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
戻る