Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекції для 3ОТ1.doc
Скачиваний:
10
Добавлен:
21.02.2016
Размер:
16.31 Mб
Скачать

События клавиатуры

В оконных компонентах Delphi определены три события, связанные с клавиатурой:

Событие

Описание

onKeyDown

Событие наступает при нажатии пользователем любой клавиши. Можно распознать нажатые клавиши, включая функциональные, и кнопки мыши, но нельзя распознать символ нажатой клавиши

onKeyPress

Событие наступает при нажатии пользователем клавиши символа. Можно распознать только нажатую клавишу символа, различить символ в верхнем и нижнем регистре, различить символы кириллицы и латинские, но нельзя распознать функциональные клавиши и кнопки.

onKeyUp

Событие наступает при отпускании пользователем любой клавиши. Можно распознать нажатые клавиши, включая функциональные, и кнопки мыши, но нельзя распознать символ отпускаемой клавиши

Кроме того, при нажатии пользователем клавиши табуляции фокус может переключаться с элемента на элемент, что вызывает события onEnter и onExit.

Последовательность событий клавиатуры при нажатии клавиш Shift-н:

Действия пользователя

Событие

Нажатие клавиши Shift

OnKeyDown. Возможно распознавание нажатой клавиши Shift

Нажатие клавиши «н»

OnKeyDown. Возможно распознавание нажатой клавиши Shift, нажатой клавиши «н», но отличить верхний региситр от нижнего и латинский от руского невозможно

OnKeyPress. Возможно распознавание символа с учетом регисира и языка, но невозможно распознавание нажатой клавиши Shift

Отпускание клавиши «н»

OnKeyUp. Возможно распознавание нажатой клавиши Shift, отпущенной клавиши «н», но отличить верхний региситр от нижнего и латинский от руского невозможно

Отпускание клавиши Shift

OnKeyUp Возможно распознавание отпущенной клавиши Shift.

Распознавание нажатых клавиш

Заголовок обработчика событий может иметь следующий вид:

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

Параметр Sender типа TОbject содержит указатель на компонент, в котором произошло событие. Он не требуется, если пишется обработчик события для одного конкретного компонента.

Параметр Shift представляет собой множествоэлементов, отражающих нажатые в это время функциональные клавиши. Только в OnKeyDown множество нажатых множество возможных элементов параметра Shift сокращено до ssShift, ssAlt, ssCtrl. Информация о нажатых клавишах мыши отсутствует.

Параметр Key определен как var, т.е. может изменяться в обработчике события. Это целое число, а не символ. Key определяет нажатую в момент события клавишу клавиатуры. Некоторые коды:

Клавиша

Десятеричное число

Шестнадцатеричное

Символическое имя

Сравнение по функции ord

F1

112

$70

VK_F1

Enter

13

$0D

VK_RETURN

Shift

16

$10

VK_SHIFT

Ctrl

17

$11

VK_CONTROL

Alt

18

$12

VK_MENU

Esc

27

$1B

VK_ESCAPE

0 )

48

$30

Ord(‘0’)

1 !

49

$31

Ord(‘1’)

N n Т т

78

$4E

Ord(‘N’)

Y y Н н

89

$59

Ord(‘Y’)

 Параметр Key является целым числоя. Определяюшим клавишу, а не символ.

Реакцию на нажатие клавиши Enter можно проверить так:

If (Key= VK_RETURN) then …

Для клавиш символов и цифр можно воспользоваться функцией ord , определяющей код символа. Коды латинских символов в верхнем регистре совпадают с виртуальными кодами, используемыми в параметре Key:

If (Key= ord(‘Y’)) then …

Пример распознавания комбинации клавиш Alt-X:

If (Key= ord(‘X’)) and (ssAlt in Shift)) then …;

Заголовок обработчика onKeyPress :

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

Параметр Key определяет нажатую клавишу символа, имеет тип char. В данном случае в обработчик передается не виртуальный код клавиши, а символ, по которому моно определить, прописная это буква, или строчная, русская или латинская.

Пусть ответ на вопрос положителен, если пользователь ввел «Д» или «д», и отрицателен, если – «Н» или «н»:

If ((Key= ‘Д’) or (Key= ‘д’)) then … или

If (Key in [‘Н’, ‘н’]) then … или

Реакцию на все возможные ответы обеспечивает структура case:

Case Key of

 ‘Д’, ‘д’: … ;

 ‘Н’, ‘н’: … ;

else beep end;

Параметр Key передается как var. Это позволяет в обработчике события изменять этот параметр, изменяя соответственно его стандартную обработку в компоненте, поскольку ваш обработчик события срабатывает раньше стандартного обработчика компонента. Например, в окно редактирования на форме пользователь может вводить только целые числа без знака, разделенные запятыми и пробелами. Моно обеспечить безошибочный ввод, подменяя все недопустимые символы нулевым, например так:

If not (Key in [‘0’..’9’,’ ‘,’,’) then Key:=#0;

При нажатии любой клавиши, кроме клавиши с цифрой, запятой или пробелом, символы подменяются нулевым символом. Можно добавить в обработчик звуковой сигнал при нажатии пользователем ошибочной клавиши:

If not (Key in [‘0’..’9’,’ ‘,’,’) then

 begin

 Key:=#0;

 Beep;

 End

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]