На этом шаге мы рассмотрим событие 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;
На следующем шаге мы перечислим общие свойства визуальных компонентов.