![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нажата ли клавиша вообше??? [D5, WinXP]
Новочеркасский Волк © (2006-02-25 20:14:00)Здравствуйте. Подскажите пожалуйсто, как на языке Delphi будит звучать следующий код:
"если нажата клавиша Z то"
Причём нажата не при активной форме а вообше, то есть просто во время работы проги набрана в Блокноте или ещё где нибудь.
------------------------------------------
Заранее спасибо!!!
ЗАХОДИТЕ НА: http://rost-on-don.net.ru/forumdisplay.php?f=28
Virgo_Style (2006-03-08 21:22:00) [1]насколько я помню правила, принято для каждого нового вопроса заводить новую ветку, а спамить - не принято
Новочеркасский Волк (2006-03-08 17:56:00) [2]Всё это чюдесно. Но возник ещё вопрос как мне инициализировать нажатия таких клавиш как: ё, ю,б, э, х, ъ и цифр? Таким способом как описан выше не получается. Может вместо 32768 надо чтото другое подставлять или чтото другое? Подскажите.
------------------------------------------------------
Заранее огромное спасибо!!!
Новочеркасский Волк (2006-03-04 16:21:00) [3]Всё это чюдесно. Но возник ещё вопрос как мне инициализировать нажатия таких клавиш как: ё, ю,б, э, х, ъ и цифр? Таким способом как описан выше не получается. Может вместо 32768 надо чтото другое подставлять или чтото другое? Подскажите.
------------------------------------------------------
Заранее огромное спасибо!!!
Новочеркасский Волк (2006-03-04 13:03:00) [4]Всё это чюдесно. Но возник ещё вопрос как мне инициализировать нажатия таких клавиш как: ё, ю,б, э, х, ъ и цифр? Таким способом как описан выше не получается. Может вместо 32768 надо чтото другое подставлять или чтото другое? Подскажите.
------------------------------------------------------
Заранее огромное спасибо!!!
Новочеркасский Волк (2006-02-27 11:08:00) [5]Огромное спасибо всем!!!. Всё работает!!!
Grief (2006-02-26 22:57:00) [6]Если на пальцах объяснить, то эта функция возвращает для конкретной клавиши число, которое будучи переведенным в двоичную систему счисления представляет собой набор флагов, несущих определенную информацию о данной клавише. Не забивай голову всеми сразу. запомни, что 15-й бит - нажата клавиша (1) или отпущена (0).
grisme (2006-02-26 15:30:00) [7]
> И как вот этот код клавиши 32768 получили тоже не понял.
32768 - это не код клавиши. За объяснением см. grisme © (26.02.06 15:02) [8] . Извини за непонятность объяснения - не умею я объяснять...:)
Джо (2006-02-26 15:27:00) [8]> [9] Новочеркасский Волк © (26.02.06 15:19)
Ord(' Z')
(Верхний регистр)
Новочеркасский Волк (2006-02-26 15:19:00) [9]Ну а чем здесь не подходит FormShow. Хорошо. Заменил я на такой код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
r: word;
begin
r:=GetKeyState(Ord('z'));
if (r and 32768)=32768 then
beep;
end;
И всё равно не работает. Что опять не так. Можете чтоб не париться сразу код вылажить. И как вот этот код клавиши 32768 получили тоже не понял. Подскажите пожалуйсто. Очень надо.
----------------------------------------------------
Заранее всем спасибо!!!
(А на мою тупость не обижайтесь. Я веть только учюсь.)
grisme (2006-02-26 15:02:00) [10]
> И почему 32767?
На 1 ошибся.. 32768, конечно...:)
Объясняю, 15й бит - положение клавиши:
исходное значение: Xxxxxxxx xxxxxxxx
32768 : 10000000 00000000
AND :------------------------
если X=1, то мы получим, в итоге, 32768, если X=0 - соответственно 0! :)
Вас что булевской алгебре не учили? :)
evvcom (2006-02-26 14:51:00) [11]
> if (r and 32767)=32767 then {нажата} else {отпущена}
И почему 32767?
wal (2006-02-26 13:02:00) [12]А почему на FormShow?
Новочеркасский Волк (2006-02-26 11:45:00) [13]Ну вот сделал я вот так:
procedure TForm1.FormShow(Sender: TObject);
var
r: word;
begin
r:=GetKeyState(Ord('z'));
if (r and 32767)=32767 then
beep;
end;
Открыл Блокнот и набираю там z и ничего!!! Почему???
Новочеркасский Волк (2006-02-26 11:35:00) [14]Спасибо. Щас попробую!
grisme (2006-02-26 05:32:00) [15]
> Новочеркасский Волк © (25.02.06 20:14)
GetKeyState - возвротит значение типа Short(2 байта). Смотришь 15 бит - если 1, то нажата, иначе отпущена.
Допустим имеем переменную r (тип word):
r:=GetKeyState(Ord('Z'));
if (r and 32767)=32767 then {нажата} else {отпущена}
Все.
Eraser (2006-02-25 22:05:00) [16]
> Новочеркасский Волк © (25.02.06 20:14)
см. GetAsyncKeyState
> ЗАХОДИТЕ НА
спам - это плохо.
Marser (2006-02-25 21:54:00) [17]Клавиатурный хук нужно использовать.
Ещё вариант - горячие клавиши - hotkeys.