События клавиатуры для визуальных компонентов

Еще одним важным средством, с помощью которого пользователь может управлять работой приложения, является клавиатура. При всей кажущейся сложности этого технического устройства существуют всего три события, связанных с клавиатурой:

— OnKeyDown – нажатие любой клавиши;
— OnKeyPress – нажатие клавиш ASCII-символов;
— OnKeyUp – отпускание любой клавиши.

Только активный компонент, который имеет фокус ввода, может обрабатывать события клавиатуры (из этого следует, что это могут быть только потомки класса TWinControl). Если активных элементов нет, то события от клавиатуры будет получать форма. Кроме того, можно настроить работу приложения так, чтобы события клавиатуры всегда перехватывала форма, а не активный элемент управления. Для этого достаточно установить свойство KeyPreview формы в true.

При возникновении событий от клавиатуры для активного компонента вызываются соответствующие процедуры их обработки. Событие OnKeyPress обычно используется в том случае, когда необходима реакция на нажатие одной нефункциональной (символьной) клавиши на клавиатуре. Например, оно не возникает при нажатии таких клавиш, как Shift или F4. События OnKeyDown и OnKeyUp чаще всего используются для определения нажатия комбинации клавиш, а также нажатия различных функциональных клавиш.

Рассмотрим обработку событий клавиатуры на примере.

Допустим, необходимо создать приложение с формой, в заголовке которой можно было бы видеть, какая символьная клавиша была нажата, а на метке Label, размещенной на форме, отображался бы код отпущенной клавиши. Выход из приложения должен осуществляться по нажатию клавиши F10. Для решения поставленной задачи, прежде всего, нужно установить свойство формы KeyPreview = true. Таким образом, все события от клавиатуры бу-дет получать форма. А чтобы форма обрабатывала события, как указано выше, требуются следующие обработчики событий:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

Form1.Caption:= ‘Нажата клавиша: ‘ + Key;

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

if Key = VK_F10 then Form1.Close;

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

Label1.Caption:= ‘Код нажатой клавиши: ‘ + IntToStr(Key);

end;

В представленных обработчиках событий параметр Key позволяет узнать, какая клавиша была нажата, а значение параметра Shift дает возможность определить, были ли нажаты клавиши Alt, Ctrl, Shift, а также кнопки мыши.

В обработчике события OnKeyDown для проверки нажатия клавиши F10 используется стандартная константа VK_F10, которая содержит код данной клавиши. В Delphi существует полный набор таких констант для каждой клавиши. Их полный перечень можно найти в справочной литературе.

Добавить комментарий