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

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

Нажата ли клавиша вообше??? [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.


Наверх

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