Учись программированию на C++ Builder бесплатно!

Описание


Событие OnKeyUp наступает, если компонент находится в фокусе, при отпускании пользователем любой ранее нажатой клавиши, включая функциональные и вспомогательные, такие как Shift, Alt и Ctrl.

В обработчик события передаются, кроме обычного параметра Sender, указывающего на компонент, в котором произошло событие, также параметры Key и Shift.

Параметр Key определяет клавишу клавиатуры, которая отпускается. Для не алфавитно-цифровых клавиш используются виртуальные коды API Windows. Коды не различают символы в верхнем и нижнем регистрах, и не различают символы кириллицы и латинские.

Классы


TWinControl

Определение


enum Classes__1 { ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble };
typedef Set<Classes __1, ssShift, ssDbuble> TShiftState;
typedef void (__closure *TKeyEvent)(System::TObject* Sender, Word SKey, Classes::TShiftState Shift);
__property TKeyEvent OnKeyUp

Параметр Shift является множеством, которое может быть пустым или включать следующие элементы:

Элемент Значение
ssShift Отпускается клавиша Shift.
ssAlt Отпускается клавиша Alt.
ssCtrl Отпускается клавиша Ctrl.

Значения элементов Shift, соответствующих нажатиям кнопок мыши, в данном событии не используются.
Событие OnKeyUp наиболее удобно, чтобы распознавать нажатые клавиши, особенно, комбинации клавиш. Надо только не забывать, что параметр Key имеет тип word, а не char, так что для распознавания надо использовать виртуальные коды. К тому же, надо учитывать, что виртуальный код не различает символы в верхнем и нижнем регистре и не реагирует на то, русский или английский язык включен в данный момент.

Пример


Пусть нужно написать обработчик, который бы реагировал на нажатие клавиш Shift+Y. Проверить нажатые клавиши можно оператором, но он будет реагировать и на «У», и на «у», и даже на русские буквы «Н» и «н», которые обычно расположены на той же клавише, что и латинская «Y». Для распознавания действительного символа надо использовать событие OnKeyPress.

if((Key == 'Y') && Shift.Contains(ssShift))

Поиск по сайту