На этом шаге мы рассмотрим событие OnKeyPress.
Заголовок обработчика этого события имеет вид:
procedure (Sender: TObject; var Key: Char);
В этот обработчик также передается параметр Key, определяющий
нажатую клавишу символа.
Но обратите внимание, что тип этого параметра не целое число, как в
предыдущих случаях, a Char - символ.
В данном случае в обработчик передается не виртуальный код клавиши, а
символ, по которому можно определить,
прописная это буква, или строчная, русская, или латинская. Поэтому описанных
на предыдущих шагах сложностей
с распознаванием символов не возникает.
Пусть, например, вы задали пользователю вопрос, на который он должен
ответить символами "Д" или "д" (да), или символами "Н" или "н"
(нет). Тогда распознать положительный ответ в обработчике события
OnKeyPress можно оператором:
if ( (Key = 'Д') or (Key = 'д')) then ... ;
Этот оператор можно записать короче, воспользовавшись операцией in:
if (Key in ['Д','д']) then ... ;
Приведенные операторы реагируют только на положительный ответ
пользователя, не реагируя на отрицательный или ошибочный
ответ. Реакцию на все возможные ответы обеспечивает структура case:
case Key of 'Д','д': ... ; 'Н','н': ... ; else beep; end;
Здесь предусмотрена реакция на положительный и отрицательный ответ, а
также звуковой сигнал
при ошибочном ответе.
Посмотрев на приведенный ранее заголовок обработчика, вы можете увидеть,
что параметр
Key передается как var. Это позволяет в обработчике изменять
этот параметр, изменяя
соответственно его стандартную обработку в компоненте, поскольку ваш
обработчик события срабатывает
раньше стандартного обработчика компонента. Пусть, например,
вы хотите иметь на
форме окно редактирования Edit1, в котором пользователь должен
вводить только целые числа без
знака, разделенные запятыми или пробелами. Вы можете обеспечить
безошибочный ввод, подменяя все недопустимые
символы нулевым с помощью, например, такого оператора:
if not (Key in ['0'..'9',' ', ',']) then Key:=#0;
При нажатии пользователем любой клавиши, кроме клавиш с цифрой, запятой
или пробелом, символы подменяются
нулевым символом и просто не появляются в окне редактирования, как вы
можете убедиться, сделав приложение с этим
простым примером. Можно добавить в обработчик звуковой сигнал при нажатии
пользователем ошибочной клавиши:
if not (Key in ['0'..'9',' ', ',']) then begin Key:=#0; Beep; end;
Текст этого примера можно взять здесь.
На следующем шаге мы перечислим общие свойства визуальных компонентов.