Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Удерживание кнопок клавиатуры


Автор: Orodret 15.4.2009, 20:25
Необходимо чтобы переменная q постоянно увеличивалась на 1, когда удерживается пробел

В Unit1.cpp включил функцию:

Код:

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,TShiftState Shift)
{
 if(Key==' ')
 q++;
}
А в Unit.h:

Код:

void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);

Когда удерживаю нажатым пробел ничего не происходит, подскажите что ещё необходимо добавить чтобы заработало.

Автор: 586 15.4.2009, 20:30
Используй событие OnKeyPress.

Автор: Orodret 15.4.2009, 20:43
А как ей пользоваться?
Приведите пример

Автор: 586 15.4.2009, 20:49
Также, как и OnKeyDown.

1. В окне Object TreeView выделяете форму.
2. В окне Object Inspector выбираете вкладку Events.
3. Находите в списке OnKeyPress и два раза кликаете по нему - метод автоматически создастся.

Автор: Orodret 15.4.2009, 21:01
А если мне надо чтобы кнопок OnKeyDown было несколько например VK_LEFT и VK_RIGHT?
Удаётся создать только одну

Автор: 586 15.4.2009, 21:52
Цитата(Orodret @  15.4.2009,  21:25 Найти цитируемый пост)
Когда удерживаю нажатым пробел ничего не происходит,

не происходит потому, что переменную надо вывести на экран smile
Код
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
     if(Key == ' ') Caption = i++;
}

Несколько кнопок обработать не получится. Будет обрабатываться только одна. Это то же самое, что в блокноте удерживать кнопки 'a' и 'b', в результате будет писаться только 'b'.

Можно воспользоваться функцией GetKeyState для проверки состояния второй клавиши:
Код
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if(Key == VK_LEFT)
    {
        if(GetKeyState(VK_RIGHT) < 0)
        {
            // VK_LEFT and VK_RIGHT is down
            Caption = i++;
        }
    }
}

Автор: Orodret 15.4.2009, 22:47
Спасибо помогло smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)