Як обробити подія rtcut
Як обробити подія TForm.OnShortCut?
Привіт, майстри.
Мені відомо, що можна використовувати змінну Msg.CharCode для того, щоб визначити яка клавіша натиснута. Але я не можу розібратися як визначити поєднання відразу декількох натиснутих клавіш. наприклад
Ніхто не стикався?
The Msg parameter represents the Windows keystroke message. The virtual key code is given by the CharCode field, and the KeyData field contains a set of flags that indicate the repeat count, scan code, extended-key flag, context code, previous key-state flag and transition-state flag. See the Windows documentation for details on these fields.
procedure TForm1.FormShortCut (var Msg: TWMKey; var Handled: Boolean);
begin
if Msg.CharCode = Ord ( "K") then
if (GetKeyState (VK_MENU) <0)
and (GetKeyState (VK_SHIFT) <0) then
begin
Handled: = True;
ShowMessage ( "Натиснули Alt + Shift + K");
end;
end;
Ні, знаєте. Цей метод не працює. Я перевірив. Більш того, схоже за допомогою події TForm.OnShortCut не можна відловити поєднання відразу декількох натиснутих клавіш. Якщо я, наприклад, натиснув і утримую
Тоді інше питання: як відловити в якійсь конкретній формі (діалогової, модальної) комбінацію натиснутих гарячих клавіш?
> Ні, знаєте. Цей метод не працює. Я перевірив.
Точно перевіряв? Думаєте, я не перевіряв, перед публікоавніем? Все працює. Так, дійсно, OnShortCut отримує тільки одну будь-яку клавішу, будь то Ctrl, Shift або А якась. Але тут визначаємо, чи натиснута ще якась клавіша:
GetKeyState (VK_MENU) отримує інфу, чи натиснута клавіша Alt, GetKeyState (VK_SHIFT) - натиснута Shift.
Так що все ок.
> Якщо я, наприклад, натиснув і утримую
> На іншу клавішу подія OnShortCut вже не викликається.
Як перевіряли? У мене все викликається.
Прошу вибачення. В даному виді приклад працює як годинник. Просто я перевіряв на поєднанні клавіш
Мабуть клавіша Tab обробляється десь всередині форми і Handled звертається в True. Адже Tab - служить для переміщення між контролем.
Я ж хочу, щоб поєднання клавіш
Ось мій приклад, він не працює:
if Msg.CharCode = VK_TAB then
if (GetKeyState (VK_CONTROL) <0) then
begin
Handled: = True;
ShowMessage ( "Натиснули Ctrl + Tab");
end;
Пам'ять: 0.73 MB
Час: 0.045 c