Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

 

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

 

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

 

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

Последовательность событий клавиатуры при нажатии клавиш 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   $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 – Редактори символьної інформації




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


Дата добавления: 2014-12-25; Просмотров: 537; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.