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

 

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

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

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

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

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

 

Клавиша Десятеричное число Шестнадцатеричное Символическое имя Сравнение по функции ord
F1 $70 VK_F1  
Enter $0D VK_RETURN  
Shift $10 VK_SHIFT  
Ctrl $11 VK_CONTROL  
Alt $12 VK_MENU  
Esc $1B VK_ESCAPE  
0 ) $30   Ord(‘0’)
1 ! $31   Ord(‘1’)
N n Т т $4E   Ord(‘N’)
Y y Н н $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

Контрольні питання

1. Охарактеризувати процедуру обробки подій від клавіатури та миші

2. Розповісти про розпізнання витоку події, при натисканні кнопок або клавіш, координат курсора


САМОСТІЙНА РОБОТА СТУДЕНТА

ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ

ТЕМА 6.2: ВІЗУАЛЬНІ КОМПОНЕНТИ

Самостійне заняття №30 –Редактори символьної інформації

План заняття

1. Поняття технології InraWeb Delphi

2. Створення прикладного застосування за допомогою IntraWeb








Дата добавления: 2014-12-01; просмотров: 1046;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.