C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Обработка множества нажатых клавиш
VovaN
Отправлено: 25.05.2005, 20:29


Дежурный стрелочник

Группа: Участник
Сообщений: 72



Суть: пользователь одновременно нажал много клавиш.
При этом я обрабатываю событие OnKeyUp. Событие обрабатывается столько раз, сколько нажатых клавиш.
Мне надо обработать только одну из клавиш (первую из последовательности).
Сейчас я делаю так:
Считаю сколько клавиш, а затем в обработчике делаю только один проход.
Но это вызывает некоторые трудности при работе с другими компонентами на форме.

Вопрос: нельзя ли очищать буфер клавиатуры (если можно, то как?) после обработки первого события, чтобы не было множества вызовов OnKeyUp?
olegenty
Отправлено: 26.05.2005, 07:01


Ветеран

Группа: Модератор
Сообщений: 2412



Key = 0 не помогает?
Sl@Sh
Отправлено: 26.05.2005, 09:33


Мастер участка

Группа: Участник
Сообщений: 383



QUOTE (VovaN @ 25/05/2005, 20:29)
Мне надо обработать только одну из клавиш (первую из последовательности).

Что вам мешает запомнить её ? Объявите счётчик, который увеличивается при каждом новом нажатии, и запишите ту клавишу, которая была при счётчике, равном 0.
VovaN
Отправлено: 26.05.2005, 18:40


Дежурный стрелочник

Группа: Участник
Сообщений: 72



QUOTE (olegenty @ 26/05/2005, 07:01)
Key = 0 не помогает?

Нет, не помогает
VovaN
Отправлено: 26.05.2005, 18:45


Дежурный стрелочник

Группа: Участник
Сообщений: 72



QUOTE (Sl@Sh @ 26/05/2005, 09:33)
Что вам мешает запомнить её ? Объявите счётчик, который увеличивается при каждом новом нажатии, и запишите ту клавишу, которая была при счётчике, равном 0.

Да я пока что так и делаю. Но мне бы хотелось узнать что-то на тему очистки буфера клавиатуры (тоесть одну клавишу прочитали, а остальные — выкинули из буфера). Просто такой подход несколько мешает мне при работе с другими компонентами.
timson
Отправлено: 27.05.2005, 11:13


Станционный диспетчер

Группа: Участник
Сообщений: 82



QUOTE
нельзя ли очищать буфер клавиатуры (если можно, то как?) после обработки первого события, чтобы не было множества вызовов OnKeyUp
нельзя, т.к. сообщение окну отправлено, и оно помещается в очередь сообщений. Может возможно, если только запретить прием сообщений данного типа.

Возможно может пригодиться:
- состояние указаной клавиши(нажата, отпущена, ..)
CODE
SHORT GetKeyState(int nVirtKey);

- состояние всех клавиш в буфер
CODE
BOOL GetKeyboardState(PBYTE lpKeyState);

- есть ли в очереди сообщений сообщения от мыши и клавы
CODE
BOOL GetInputState(VOID);

Вернуться в Вопросы программирования в C++Builder