| 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); |
|
 |