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

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

Как отловить одновременное нажатие в проге клавиш Ctrl+Alt+S [D6, Win95/98, WinME, NT4, Win2k, WinXP]


LordBTR ©   (2004-08-24 12:45:00) 

Как отловить одновременное нажатие в проге клавиш "Ctrl"+"Alt"+"S" ? Заранее спасибо.


Dimka-gl   (2004-08-24 15:31:00) [1]

а как аналогичное провернуть не в своей программе. Через hooks по-моему только по одной клавише ловится, либо клавиша + alt


LordBTR   (2004-08-24 14:03:00) [2]

Ок. Всем спасибо. Вариант:
if (key = 83) and (Shift = [ssCtrl, ssAlt]) then
работает.


NAlexey   (2004-08-24 13:53:00) [3]

(GetAsyncKeyState(...) < 0) and ((GetAsyncKeyState(VK_LCONTROL) < 0) or (GetAsyncKeyState(VK_RCONTROL) < 0) and ((GetAsyncKeyState(VK_LMENU) < 0)  or (GetAsyncKeyState(VK_RMENU) < 0))


Юрий Зотов   (2004-08-24 13:51:00) [4]

> wicked ©   (24.08.04 13:33) [9]

in проверяет вхождение элемента, а не подмножества.

> 46_55_41_44 ©   (24.08.04 13:33) [8]
> KSergey ©   (24.08.04 13:44) [10]

Зависит от задачи (надо ли ловить строго [ssCtrl, ssAlt], или можно в сочетании еще с чем-то).


KSergey   (2004-08-24 13:44:00) [5]

> [7] Юрий Зотов ©   (24.08.04 13:27)
> В таких случаях простой и компактный код дает использование
> пересечения множеств:
>
> ... and (Shift * [ssCtrl, ssAlt] = [ssCtrl, ssAlt]) ...

Да, но на сколько я понимаю тогда и при нажатии еще и Shift это даст TRUE, что, вероятно, не соответствует задаче...


46_55_41_44   (2004-08-24 13:33:00) [6]

if (key = 83) and (Shift = [ssCtrl, ssAlt]) then
попробуй так!


wicked   (2004-08-24 13:33:00) [7]


>  and (Shift * [ssCtrl, ssAlt] = [ssCtrl, ssAlt])

а "in" подойдет?...

по сабжу - сделать Action с таким shortcut'ом...


Юрий Зотов   (2004-08-24 13:27:00) [8]

В таких случаях простой и компактный код дает использование пересечения множеств:

... and (Shift * [ssCtrl, ssAlt] = [ssCtrl, ssAlt]) ...


LordBTR   (2004-08-24 13:23:00) [9]

if (key=83) and ([ssCtrl,ssShift]<=Shift) then
при нажатии любой клавиши в комбинации с ctrl+alt+... срабатывает. Что не так?


Palladin   (2004-08-24 13:22:00) [10]

перепутал...


46_55_41_44   (2004-08-24 13:20:00) [11]

> Palladin ©   (24.08.04 13:16) [3]

В этом случае и Shift будет работать...

if (key = 83) and (Shift = [ssCtrl, ssAlt]) then
...


Palladin   (2004-08-24 13:16:00) [12]

Shift это множество

if (key=83) and ([ssCtrl,ssShift]<=Shift) then


LordBTR   (2004-08-24 13:09:00) [13]

Ну а конкретно - ОДНОВРЕМЕННОЕ как?
if (key=83) and (shift = [ssCtrl]) and (shift = [ssAlt]) then
не работает, т.к. shift получается либо [ssCtrl], либо [ssAlt], а одновременно то как?


Palladin   (2004-08-24 12:51:00) [14]

Ну например в TForm.OnKeyDown


Наверх

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