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

В этот обработчик, как и в описанные выше, передается параметр Key, опреде-
|   ляющий нажатую клавишу символа. Но обратите внимание, что тип этого пара-
'    метра не целое число, как в предыдущих случаях, a char — символ. В данном слу-
чае в обработчик передается не виртуальный код клавиши, а символ, по которому
можно определить, прописная это буква, или строчная, русская, или латинская.
Поэтому описанных выше сложностей с распознаванием символов не возникает.

Пусть, например, вы задали пользователю вопрос, на который он должен отве-
тить символами «Д» или «Д» (да), или символами «Н» или «н» (нет). Тогда распо-
знать положительный ответ в обработчике события OnKeyPress можно оператором:

if ((Key == 'Д') II (Key == 'д')) ...

Приведенный оператор реагирует только на положительный ответ пользовате-
ля, не реагируя на отрицательный или ошибочный ответ. Реакцию на все возмож-
ные ответы обеспечивает структура множественного выбора switch (см. раз-
дел 11.8.1.2 в главе II):

switch (Key)
{
case 'Д':

case 'д': ... ;

break;

case 'Н':

case 'н': ...;

break;

default: Beep() ;

)

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

Посмотрев на приведенный ранее заголовок обработчика, вы можете увидеть,
что параметр Key передается по ссылке. Это позволяет в обработчике изменять
Key, изменяя соответственно его стандартную обработку в компоненте, поскольку
I   ваш обработчик события срабатывает раньше стандартного обработчика компонен-
та. Пусть, например, вы хотите иметь на форме окно редактирования Editi, в ко-
тором пользователь должен вводить только целые числа без знака. Вы можете
обеспечить безошибочный ввод, подменяя все недопустимые символы нулевым с
помощью, например, следующего кода:

Set <char, '0', '9'> Dig;

Dig « '0' « 'Г « '2' « '3' « '4' « '5'
« '6' « '7' « '8' « '9';

if ( ! Dig.Contains(Key))
{ Key = 0; Веер () ; }

При нажатии пользователем любой клавиши, кроме клавиш с цифрами, сим-
волы подменяются нулевым символом и просто не появляются в окне редактирова-
ния, как вы можете убедиться, сделав приложение с этим простым примером.
Функция Веер воспроизводит при нажатии пользователем ошибочной клавиши
звуковой сигнал.

4.4 Перетаскивание информации об объектах —
Drag&Drop

Процесс перетаскивания с помощью мыши информации из одного объекта в
другой (Drag&Drop), коротко называемый перетаскиванием, очень широко испо-
льзуется в Windows. Например, вы можете перемещать файлы между папками,
перемещать сами папки, включая их в другие папки, и т.д. Посмотрим, как осу-
ществляется подобное перетаскивание информации об объектах в C++Builder.