262______________________________________________Глава 4

Можно сравнивать Key и с шестнадцатеричным эквивалентом кода, приведен-
ным в третьем столбце таблицы 4.4. Например, приведенный выше оператор мож-
но записать в виде:

if(Key == OxOD) ... ;

Для клавиш, которым не соответствуют символы, введены также именован-
ные константы, которые облегчают написание программы, поскольку не требуют
помнить численные коды клавиш. Например, приведенный выше оператор можно
записать в виде:

if(Key == VK_RETURN) ... ;

Для клавиш символов и цифр можно производить проверку сравнением с де
сятичным или шестнадцатеричным кодом, но это не очень удобно, так как трудно
помнить коды различных символов. Другой путь — воспользоваться тем, что коды
латинских символов в верхнем регистре совпадают с виртуальными кодами, испо
льзуемыми в параметре Key. Поэтому, например, если вы хотите распознать кла
вишу, соответствующую символу «Y», вы можете написать:

if(Key == 'У) ... ;

В этом операторе можно использовать только латинские символы в верхне-
регистре. Если вы напишете «у» или захотите написать русские символы, соответ
ствующие этой клавише — «Н» или «н», то оператор на сработает.

Помните также, что любой из приведенных выше операторов будет действо
вать на все символы, относящиеся к указанной клавише: «Y», «у», «Н» и «н»
Иногда это хорошо, а иногда плохо. Например, если вы задали пользователю к:

кой-то вопрос, на который он должен ответить Y (да) или N (нет), то подобны
оператор избавляет пользователя от необходимости следить за тем, в каком pen
стре он вводит символ и какой язык — английский или русский включен в да;

ный момент. Ему достаточно просто нажать клавишу, на которой написано «Y
Однако, если пользователь более привык к символам кириллицы, то могут во
никнуть неприятности, поскольку нажимая клавишу с латинской буквой *Y>>
русской буквой «Н» он может думать, что отвечает не положительно (Yes — да),
отрицательно (Нет).

Приведем еще один пример — автоматическую передачу фокуса очередное
оконному компоненту при нажатии пользователем клавиши Enter. Это можно сд1
дать, включив в общий обработчик событий OnKeyDown всех оконных компонен
тов оператор:

if(Key == VK_RETURN)
FindNextControl((TWinControl *)Sender, true, true, false)->SetFocus ();

^

Этот оператор с помощью метода FindNextControl ищет очередной компонент
в последовательности табуляции и передает ему фокус. Подробнее этот пример и
метод FindNextControl рассмотрен в разделе 4.1.7.

В заключение приведем пример распознавания комбинации клавиш. Пусть вы
хотите, например, распознать комбинацию Alt+X. Для этого вы можете написать
оператор:

if((Key == 'X') && Shift.Contains(ssAlt)) ... ;

Мы рассмотрели распознавание клавиш при событии OnKeyDown. Заголовок
обработчика события OnKeyUp имеет такой же вид, так что все сказанное в равной
степени относится и к событиям при отпускании клавиш.

Теперь перейдем к рассмотрению события OnKeyPress. Заголовок обработчи-
ка этого события имеет вид:

void _fastcall TFormI:-.EditlKeyPress (TObject *Sender, char &Key)