Проектирование графического интерфейса пользователя                    261

4.3.2.2 Распознавание нажатых клавиш

Заголовок обработчика события OnKeyDown может иметь, например, следую-


щий вид:

void

_fastcall TFormI::EditlKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)

Параметр Sender, указывающий на источник события, уже обсуждался выше
при описании событий мыши (см. раздел 4.3.1.2). Там же рассматривался и пара-
метр Shift, представляющий собой множество элементов, отражающих нажатые в
это время функциональные клавиши. Только в обработчике события OnKeyDown
множество возможных элементов параметра Shift сокращено до ssShift (нажата
клавиша Shift), ssAlt (нажата клавиша Alt) и ssCtrl (нажата клавиша Ctrl). Инфор-
мация о нажатых кнопках мыши отсутствует.

Основной параметр, которого не было раньше — это параметр Key. Обратите
внимание, что он передается по ссылке, т.е. может изменяться в обработчике собы-
тия. Кроме того, обратите внимание, что это целое число, а не символ.

Параметр Key определяет нажатую в момент события клавишу клавиатуры.
Для не алфавитно-цифровых клавиш используются виртуальные коды API Win-
dows. Полная таблица этих кодов приведена в справочной части книги в главе 14 в
разделе 14.1. Ниже в таблице 4.4 приведены для дальнейшего обсуждения только
несколько строк из нее, соответствующих наиболее распространенным клавишам.

Таблица 4.4. Некоторые коды клавиш

КлавишаL	Десятичное число	Шестнадцатеричное число	Символическое имя	Сравнение по символу
k	112	0х70	VKF1	
Enter	13	OxOD	VKRETURN	
Shift	16	0х10	VKSHIFT	
Ctrl	17	0х11	VKCONTROL	
Alt	18	0х12	VKJMENU	
Esc	27	OxIB	VKESCAPE	
0,)	48	0х30		0
11	49	0х31		1
n,N,T,T' —————	78	Ох4Е		N
y,Y,H,H	89	0х59		Y

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

Проверять нажатую клавишу можно, сравнивая Key с целым десятичным ко-
дом клавиши, приведенном во втором столбце таблицы 4.4. Например, реакцию на
нажатие пользователем клавиши Enter можно оформить оператором:

if(Key == 13) ... ;





