Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Нажата ли клавиша вообше???   Найти похожие ветки 

 
Новочеркасский Волк ©   (2006-02-25 20:14) [0]

Здравствуйте. Подскажите пожалуйсто, как на языке Delphi будит звучать следующий код:
"если нажата клавиша Z то"
Причём нажата не при активной форме а вообше, то есть просто во время работы проги набрана в Блокноте или ещё где нибудь.
------------------------------------------
Заранее спасибо!!!
ЗАХОДИТЕ НА:  http://rost-on-don.net.ru/forumdisplay.php?f=28


 
Marser ©   (2006-02-25 21:54) [1]

Клавиатурный хук нужно использовать.
Ещё вариант - горячие клавиши - hotkeys.


 
Eraser ©   (2006-02-25 22:05) [2]


> Новочеркасский Волк ©   (25.02.06 20:14)

см. GetAsyncKeyState

> ЗАХОДИТЕ НА

спам - это плохо.


 
grisme ©   (2006-02-26 05:32) [3]


> Новочеркасский Волк ©   (25.02.06 20:14)


GetKeyState - возвротит значение типа Short(2 байта). Смотришь 15 бит - если 1, то нажата, иначе отпущена.

Допустим имеем переменную r (тип word):
r:=GetKeyState(Ord("Z"));
if (r and 32767)=32767 then {нажата} else {отпущена}

Все.


 
Новочеркасский Волк ©   (2006-02-26 11:35) [4]

Спасибо. Щас попробую!


 
Новочеркасский Волк ©   (2006-02-26 11:45) [5]

Ну вот сделал я вот так:

procedure TForm1.FormShow(Sender: TObject);
var
r: word;
begin
r:=GetKeyState(Ord("z"));
if (r and 32767)=32767 then
beep;
end;

Открыл Блокнот и набираю там z и ничего!!! Почему???


 
wal ©   (2006-02-26 13:02) [6]

А почему на FormShow?


 
evvcom ©   (2006-02-26 14:51) [7]


> if (r and 32767)=32767 then {нажата} else {отпущена}

И почему 32767?


 
grisme ©   (2006-02-26 15:02) [8]


> И почему 32767?

На 1 ошибся.. 32768, конечно...:)
Объясняю, 15й бит - положение клавиши:
исходное значение: Xxxxxxxx xxxxxxxx
32768                  : 10000000 00000000
AND                    :------------------------
если X=1, то мы получим, в итоге, 32768, если X=0 - соответственно 0! :)
Вас что булевской алгебре не учили? :)


 
Новочеркасский Волк ©   (2006-02-26 15:19) [9]

Ну а чем здесь не подходит FormShow. Хорошо. Заменил я на такой код:

procedure TForm1.Timer1Timer(Sender: TObject);
var
r: word;
begin
r:=GetKeyState(Ord("z"));
if (r and 32768)=32768 then
beep;
end;

И всё равно не работает. Что опять не так. Можете чтоб не париться сразу код вылажить. И как вот этот код клавиши 32768 получили тоже не понял. Подскажите пожалуйсто. Очень надо.
----------------------------------------------------
Заранее всем спасибо!!!
(А на мою тупость не обижайтесь. Я веть только учюсь.)


 
Джо ©   (2006-02-26 15:27) [10]

> [9] Новочеркасский Волк ©   (26.02.06 15:19)

Ord("Z")
(Верхний регистр)


 
grisme ©   (2006-02-26 15:30) [11]


> И как вот этот код клавиши 32768 получили тоже не понял.


32768 - это не код клавиши. За объяснением см. grisme ©   (26.02.06 15:02) [8] . Извини за непонятность объяснения - не умею я объяснять...:)


 
Grief ©   (2006-02-26 22:57) [12]

Если на пальцах объяснить, то эта функция возвращает для конкретной клавиши число, которое будучи переведенным в двоичную систему счисления представляет собой набор флагов, несущих определенную информацию о данной клавише. Не забивай голову всеми сразу. запомни, что 15-й бит - нажата клавиша (1) или отпущена (0).


 
Новочеркасский Волк ©   (2006-02-27 11:08) [13]

Огромное спасибо всем!!!. Всё работает!!!


 
Новочеркасский Волк ©   (2006-03-04 13:03) [14]

Всё это чюдесно. Но возник ещё вопрос как мне инициализировать нажатия таких клавиш как: ё, ю,б, э, х, ъ и цифр? Таким способом как описан выше не получается. Может вместо 32768 надо чтото другое подставлять или чтото другое? Подскажите.
------------------------------------------------------
Заранее огромное спасибо!!!


 
Новочеркасский Волк ©   (2006-03-04 16:21) [15]

Всё это чюдесно. Но возник ещё вопрос как мне инициализировать нажатия таких клавиш как: ё, ю,б, э, х, ъ и цифр? Таким способом как описан выше не получается. Может вместо 32768 надо чтото другое подставлять или чтото другое? Подскажите.
------------------------------------------------------
Заранее огромное спасибо!!!


 
Новочеркасский Волк ©   (2006-03-08 17:56) [16]

Всё это чюдесно. Но возник ещё вопрос как мне инициализировать нажатия таких клавиш как: ё, ю,б, э, х, ъ и цифр? Таким способом как описан выше не получается. Может вместо 32768 надо чтото другое подставлять или чтото другое? Подскажите.
------------------------------------------------------
Заранее огромное спасибо!!!


 
Virgo_Style ©   (2006-03-08 21:22) [17]

насколько я помню правила, принято для каждого нового вопроса заводить новую ветку, а спамить - не принято



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.037 c
15-1141165762
McSimm
2006-03-01 01:29
2006.03.26
Специально для пользователей клиентских программ


8-1129748506
NEznakOmka
2005-10-19 23:01
2006.03.26
Превращение текстового сообщения в звук


15-1141233568
Piter
2006-03-01 20:19
2006.03.26
Радио-интернет и телефония


2-1141019874
Рафик
2006-02-27 08:57
2006.03.26
DBGrid


15-1141120583
AlexeyT
2006-02-28 12:56
2006.03.26
Статья "Написание оптимального кода под Delphi"