Распознавание нажатых клавиш. Событие 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;

Текст этого примера можно взять здесь.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий