![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить нажатие alt [D7]
Wolfram © (2006-02-20 13:34:00)Мне нужно отлавливать нажитие любых клавиш, в том числе сдвиговых (ctrl, alt, shift). Я использую компонент ApplicationEvents, но в него не попадает нажатие клавишы alt. Я пробовал использовать событие формы OnKeyDown, но в него не попадает Tab. Как можно решить эту проблему и отлавливать нажатие любых клавишь?
Wolfram (2006-02-21 14:13:00) [1]Спасибо, знаю я про все эти функции, но есть еще и компонет HotKey...
Это то, что мне было нужно. :)
delphi-oracle (2006-02-20 23:25:00) [2]Есть такая класная функция GetKeyState
VK_MENU - альт
getkeystate(VK_MENU)<-126альт нажат
getkeystate(VK_TAB)<-126таб нажат
GetKeyState возвращает значение -127 или -128.
Единственная проблема - ето не событие, а просто проверяет, нажата ли клавиша. Я однажды уже делал что-то такое и обнаружил, что функция замечает все клавишы, независимо от активного приложения.
Если нажать Ctrl+левая кнопка мыши на VK_TAB, то увидиш все VK_*
Leonid Troyanovsky (2006-02-20 14:04:00) [3]
> Wolfram © (20.02.06 13:34)
> Мне нужно отлавливать нажитие любых клавиш, в том числе
> сдвиговых (ctrl, alt, shift). Я использую компонент ApplicationEvents,
> но в него не попадает нажатие клавишы alt.
Все попадает.
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
var Handled: Boolean);
begin
if msg.CharCode = vk_menu then
{Нажата клавиша Alt}
end;
--
Regards, LVT.
Wolfram (2006-02-20 13:48:00) [4]Ну, дык, в том то и дело - когда жмёшь alt WM_KEYDOWN не приходит!!!
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if msg.message=WM_KEYDOWN then ShowMessage('test');
end;
Так вот, мессага не вылетает при нажатии alt.
n0name (2006-02-20 13:41:00) [5]отлавливать сообщения напрямую.
WM_KEYDOWN + WM_KEYUP