![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить одновременное нажатие в проге клавиш 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