Распознавание нажатых клавиш
Заголовок обработчика событий может иметь следующий вид:
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;