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