Шаг 9.
Распознавание нажатых клавиш. Событие OnKeyPress

    На этом шаге мы рассмотрим событие 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;
Текст этого примера можно взять здесь.

    На следующем шаге мы перечислим общие свойства визуальных компонентов.




Предыдущий шаг Содержание Следующий шаг