Як обробити подія 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 вже не викликається.

Тоді інше питання: як відловити в якійсь конкретній формі (діалогової, модальної) комбінацію натиснутих гарячих клавіш?


> Ні, знаєте. Цей метод не працює. Я перевірив.

Точно перевіряв? Думаєте, я не перевіряв, перед публікоавніем? Все працює. Так, дійсно, OnShortCut отримує тільки одну будь-яку клавішу, будь то Ctrl, Shift або А якась. Але тут визначаємо, чи натиснута ще якась клавіша:
GetKeyState (VK_MENU) отримує інфу, чи натиснута клавіша Alt, GetKeyState (VK_SHIFT) - натиснута Shift.
Так що все ок.


> Якщо я, наприклад, натиснув і утримую , то при натисканні
> На іншу клавішу подія OnShortCut вже не викликається.

Як перевіряли? У мене все викликається.

Прошу вибачення. В даному виді приклад працює як годинник. Просто я перевіряв на поєднанні клавіш + .
Мабуть клавіша Tab обробляється десь всередині форми і Handled звертається в True. Адже Tab - служить для переміщення між контролем.
Я ж хочу, щоб поєднання клавіш + переключало сторінки на формі. Список сторінок в TListView

Ось мій приклад, він не працює:
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