function TWinControl.IsMenuKey(var Message: TWMKey): Boolean;
var
Control: TWinControl;
{$IfNDef Nemesis}
// переменная не используется в проекте Немезис
Form: TCustomForm;
{$EndIf Nemesis}
LocalPopupMenu: TPopupMenu;
begin
if (Message.CharCode = vk_Control) OR (Message.CharCode = VK_SHIFT) OR
(Message.CharCode = VK_MENU) OR (Message.CharCode = VK_Capital) then {V}
begin
// - эти клавиши в одиночку не могут быть ShortCut'ами - значит нечего их пытаться транслировать в
// ShortCut.
Result := false;
Exit;
end;//Message.CharCode = vk_Control..
Result := True;
if not (csDesigning in ComponentState) then
begin
Control := Self;
while Control <> nil do
begin
LocalPopupMenu := Control.GetPopupMenu;
if Assigned(LocalPopupMenu) and (LocalPopupMenu.WindowHandle <> 0) and
LocalPopupMenu.IsShortCut(Message) then Exit;
Control := Control.Parent;
end;
{$IfNDef Nemesis}
// в Немезисе это не нужно, потому, что ShortCut пункта меню вызывается
// через механизм VCM-а, а если этот код оставить, то на Celeron 333 будут
// значительные задержки при вводе символов
Form := GetParentForm(Self);
if (Form <> nil) and Form.IsShortCut(Message) then Exit;
{$EndIf Nemesis}
end;
with Message do
if SendAppMessage(CM_APPKEYDOWN, CharCode, KeyData) <> 0 then Exit;
Result := False;
end;
Комментариев нет:
Отправить комментарий