Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отловить нажатие 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо