Какое событие возникает при нажатии и отпускании любой клавиши
Перейти к содержимому

Какое событие возникает при нажатии и отпускании любой клавиши

  • автор:

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

Когда пользователь нажимает клавишу, возникает целая серия событий. В таблице эти события перечислены в порядке их возникновения:

Хронология возникновения событий

Имя Тип маршрутизации Описание
PreviewKeyDown Туннелирование Возникает при нажатии клавиши.
KeyDown Пузырьковое распространение То же
PreviewTextInput Туннелирование Возникает, когда нажатие клавиши завершено, и элемент получает текстовый ввод. Это событие не возникает для тех клавиш, которые не «печатают» символы (например, оно не возникает при нажатии клавиш , , , клавиш управления курсором, функциональных клавиш и т.д.)
TextInput Пузырьковое распространение То же
PreviewKeyUp Туннелирование Возникает при отпускании клавиши
KeyUp Пузырьковое распространение То же

Обработка событий клавиатуры отнюдь не так легка, как это может показаться. Некоторые элементы управления могут блокировать часть этих событий, чтобы выполнять свою собственную обработку клавиатуры. Наиболее ярким примером является элемент TextBox, который блокирует событие TextInput, а также событие KeyDown для нажатия некоторых клавиш, таких как клавиши управления курсором. В подобных случаях обычно все-таки можно использовать туннелируемые события (PreviewTextlnput и PreviewKeyDown).

Элемент TextBox добавляет одно новое событие — TextChanged. Это событие возникает сразу после того, как нажатие клавиши приводит к изменению текста в текстовом поле. Однако в этот момент новый текст уже видим в текстовом поле, потому отменять нежелательное нажатие клавиши уже поздно.

Обработка нажатия клавиши

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

Этот пример демонстрирует один важный момент. События PreviewKeyDown и KeyDown возникают при каждом нажатии клавиши. Однако событие TextInput возникает только тогда, когда в элементе был «введен» символ. На самом деле это может означать нажатие многих клавиш. В примере, нужно нажать две клавиши, чтобы получить заглавную букву S: сначала клавишу , а затем клавишу . В результате получаются по два события KeyDown и KeyUp, но только одно событие TextInput.

    Игнорировать повторное нажатие символов  
public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); >private void Clear_Click(object sender, RoutedEventArgs e) < lbxEvents.Items.Clear(); txtContent.Clear(); i = 0; >protected int i = 0; private void KeyEvents(object sender, KeyEventArgs e) < if ((bool)chkIgnoreRepeat.IsChecked && e.IsRepeat) return; i++; string s = "Event" + i + ": " + e.RoutedEvent + " Клавиша: " + e.Key; lbxEvents.Items.Add(s); >private void TextInputEvent(object sender, TextCompositionEventArgs e) < i++; string s = "Event" + i + ": " + e.RoutedEvent + " Клавиша: " + e.Text; lbxEvents.Items.Add(s); >>

Наблюдение за клавиатурой

Каждое из событий PreviewKeyDown, KeyDown, PreviewKey и KeyUp передает объекту KeyEventArgs одну и ту же информацию. Самой важной ее частью является свойство Key, которое возвращает значение из перечисления System.Windows.Input.Key и идентифицирует нажатую или отпущенную клавишу.

Значение Key не учитывает состояние любой другой клавиши — например, была ли прижата клавиша в момент нажатия ; в любом случае вы получите одно и то же значение Key (Key.S).

Здесь присутствует одна сложность. В зависимости от настройки клавиатуры в Windows, удержание клавиши в прижатом состоянии приводит к повторам нажатия после короткого промежутка времени. Например, прижатие клавиши приведет к вводу в текстовое поле целой серии символов S. Точно так же прижатие клавиши приводит к повторам нажатия и возникновению серии событий KeyDown. В реальном примере при нажатии комбинации текстовое поле сгенерирует серию событий KeyDown для клавиши , потом событие KeyDown для клавиши , событие TextInput (или событие TextChanged в случае текстового поля), а затем событие KeyUp для клавиш и . Если нужно игнорировать повторы нажатия клавиши , то можно проверить, является ли нажатие результатом прижатия клавиши, с помощью свойства KeyEventArgs.IsRepeat.

События PreviewKeyDown, KeyDown, PreviewKey и KeyUp больше подходят для написания низкоуровневого кода обработки ввода с клавиатуры (что редко бывает нужно — разве что в пользовательских элементах управления) и обработки нажатий специальных клавиш (например, функциональных).

За событием KeyDown следует событие PreviewTextInput. (Событие TextInput не возникает, поскольку элемент TextBox блокирует его.) В этот момент текст еще не отображается в элементе управления.

Событие TextInput обеспечивает код объекта TextCompositionEventArgs. Этот объект содержит свойство Text, которое дает обработанный текст, подготовленный к передаче элементу управления.

В идеале событие PreviewTextInput можно было бы использовать для выполнения проверки в элементах управления наподобие TextBox. Например, если вы создаете текстовое поле для ввода только чисел, можно проверить, не была ли введена при текущем нажатии клавиши буква, и установить флаг Handled, если это так. Увы — событие PreviewTextIlnput не генерируется для некоторых клавиш, которые бывает нужно обрабатывать. Например, при нажатии клавиши пробела в текстовом поле событие PreviewTextInput вообще пропускается. Это означает, что придется обрабатывать также событие PreviewKeyDown.

К сожалению, трудно реализовать надежную логику проверки данных в обработчике события PreviewKeyDown, т.к. в наличии имеется только значение Key, а это слишком низкоуровневый фрагмент информации. Например, в перечислении Key различаются клавиши цифровой клавиатуры (блок, предназначенный для ввода только цифр) и обычной клавиатуры. Это означает, что в зависимости от того, где нажата клавиша с цифрой 9, вы получите или значение Key.D9, или значение Key.NumPad9. Проверка всех допустимых значений как минимум очень утомительна.

Одним из выходов является использование класса KeyConverter, который позволяет преобразовать значение Key в более полезную строку. Например, вызов функции KeyConverter.ConvertToString() с любым из значений Key.D9 и Key.NumPad9 возвращает строковый результат «9». Вызов преобразования Key.ToString() дает менее полезное имя перечисления (либо «D9», либо «NumPad9»):

KeyConverter converter = new KeyConverter(); string key = converter.ConvertToString(e.Key);

Однако использовать KeyConverter тоже не очень удобно, поскольку приходится обрабатывать длинные строки (например, «Backspace») для тех нажатий клавиш, которые не приводят к вводу текста.

Наиболее подходящим вариантом является обработка события PreviewTextlnput (где выполняется большая часть проверки) в сочетании с событием PreviewKeyDown для нажатий тех клавиш, которые не генерируют событие PreviewTextInput в текстовом поле (например, пробела).

keydown и keyup

События происходят при нажатии клавиш клавиатуры. Но в чем между ними разница?

Время чтения: меньше 5 мин

Открыть/закрыть навигацию по статье
Контрибьюторы:

  • Николай Лопин ,
  • Светлана Коробцева ,
  • Виталий Баев

Обновлено 1 августа 2022

Эта статья связана с обработкой событий в JavaScript. Зачем нужны события и как с ними работать читайте в статье События.

Кратко

События на HTML-элементе. Когда пользователь нажимает на клавишу клавиатуры, происходит событие keydown , как только пользователь отпустил клавишу — произойдёт событие keyup .

Событие keydown фиксирует момент нажатия клавиши, до того как эта клавиша будет отпущена, что, по сути, является первой фазой нажатия. Продолжением является событие keyup — момент, когда клавиша будет отпущена.

Как пишется

keydown

 const spy = document.getElementById('keyboardSpy') spy.addEventListener('keydown', function (event)  alert('Нажата клавиша ' + event.key)>) const spy = document.getElementById('keyboardSpy') spy.addEventListener('keydown', function (event)  alert('Нажата клавиша ' + event.key) >)      

keyup

 const spy = document.getElementById('keyboardSpy') spy.addEventListener('keyup', function (event)  alert(`Клавиша $ отпущена`)>) const spy = document.getElementById('keyboardSpy') spy.addEventListener('keyup', function (event)  alert(`Клавиша $event.key> отпущена`) >)      

Как понять

В функцию-обработчик также передаётся объект события, в котором есть информация о нажатой кнопке:

  • key — символьное значение. s , Я , U и так далее.
  • code — название клавиши. KeyS , KeyZ , KeyU и так далее.
  • altKey — true или false , была ли одновременно нажата/отпущена клавиша Alt .
  • ctrlKey — true или false , была ли одновременно нажата/отпущена клавиша Ctrl .
  • shiftKey — true или false , была ли одновременно нажата/отпущена клавиша Shift .
  • metaKey — true или false , была ли одновременно нажата/отпущена так называемая мета-клавиша (на Mac клавиатурах это ⌘ Command , а в Windows клавиатурах — Windows key ⊞ ).
  • keyCode — код нажатой клавиши. 83 , 90 , 85 и так далее.

️Свойство keyCode является устаревшим! Избегайте его использования, поскольку его поддержка может быть прекращена браузерами в будущем.

key возвращает символьное представление клавиши. Другими словами, если эта клавиша печатает какой-то символ, то key будет содержать его. В случае, если нажата управляющая клавиша (Shift, Ctrl и т.д.), key вернёт название этой клавиши.

code же возвращает название клавиши в контексте её физического положения на клавиатуре. Например, если взять стандартную русско-английскую QWERTY клавиатуру и нажать в русской раскладке q / й , key будет q , а code — KeyQ . Если переключить раскладку на английский и нажать ту же клавишу, то key поменяется на й , а вот code так и останется KeyQ . Также code даёт больше информации положении парных клавиш. Если нажать левый Shift, то key будет содержать просто Shift , зато code вернёт — ShiftLeft .

Благодаря этим свойствам, code удобно использовать, например для управления клавиатурой в играх, когда есть необходимость задать определённым клавишам нужные действия независимо от языка раскладки.

Если подытожить, то key говорит нам, какой символ будет напечатан, а code — название этой клавиши на клавиатуре независимо от текущего языка ввода.

Пример Keydown

При нажатии на любую клавишу в демо ниже, будет срабатывать событие keydown , которое будет выводить подсказку о нажатых клавишах:

Пример Keyup

Следующее демо будет сохранять цвет до тех пор, пока не будет зафиксировано событие keyup на клавише Shift .

Событие keydown выполняется бесконечное множество раз, до тех пор, пока клавиша будет зажата. Событие keyup будет выполнено только один раз — в момент, когда пользователь отпустит клавишу

На практике

Алекс Стегура

�� События помогут добавить горячие клавиши на сайт. Например, открывать меню по комбинации клавиш или скрывать окна по кнопке Esc .

�� Существует похожее событие keypress , оно устаревшее. Вместо него нужно использовать keydown .

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

Объекты KeyboardEvent описывают работу пользователя с клавиатурой. Каждое событие описывает клавишу; тип события (keydown, keypress или keyup) определяет произведённый тип действия.

Примечание: KeyboardEvent сообщит только о том, что на клавише произошло событие. Когда вам нужно обрабатывать ввод текста, то вместо него используйте «HTML5 input»-событие. Например, если пользователь вводит текст рукописным способом, предположим с планшета, то события клавиш могут не возникать.

keydown Событие происходит, когда нажата клавиша на клавиатуре над элементом, но ещё не отпущена. keypress Событие происходит, когда пользователь нажал клавишу на клавиатуре над элементом. keyup Событие происходит, когда нажатая клавиша на клавиатуре над элементом перешла в состояние отпущено.

Свойства объекта KeyboardEvent
altKey Возвращает true , если нажата клавиша ALT.
ctrlKey Возвращает true , если нажата клавиша CTRL.
shiftKey Возвращает true , если нажата клавиша SHIFT.
metaKey Возвращает true , если нажата клавиша META.
charCode Содержит код Юникода сгенерированного печатного символа для события keypress .
code Определяет физическое расположение нажатой клавиши на клавиатуре
key Возвращает строку, представлающее значение клавиши, на которой возникло событие.
keyCode Возвращает виртуальный код нажатой клавиши.
locale Определяет язык для событий клавиатуры и событий textinput.
location Определяет местоположение нажатой клавиши для событий клавиатуры.
which Возвращает виртуальный код нажатой клавиши.

События keydown и keyup

События keydown/keyup происходят при нажатии/отпускании клавиши и позволяют получить её скан-код в свойстве keyCode .

Скан-код клавиши одинаков в любой раскладке и в любом регистре. Например, клавиша z может означать символ «z» , «Z» или «я» , «Я» в русской раскладке, но её скан-код будет всегда одинаков: 90 .

Скан-коды

Для буквенно-цифровых клавиш есть очень простое правило: скан-код будет равен коду соответствующей заглавной английской буквы/цифры.

Например, при нажатии клавиши S (не важно, каков регистр и раскладка) её скан-код будет равен «S».charCodeAt(0) .

Для других символов, в частности, знаков пунктуации, есть таблица кодов, которую можно взять, например, из статьи Джона Уолтера: JavaScript Madness: Keyboard Events, или же можно нажать на нужную клавишу на тестовом стенде и получить код.

Когда-то в этих кодах была масса кросс-браузерных несовместимостей. Сейчас всё проще – таблицы кодов в различных браузерах почти полностью совпадают. Но некоторые несовместимости, всё же, остались. Вы можете увидеть их в таблице ниже. Слева – клавиша с символом, а справа – скан-коды в различных браузерах.

Клавиша Firefox Остальные браузеры
; 59 186
= 107 187
109 188

Остальные коды одинаковы, код для нужного символа будет в тестовом стенде.

Тестовый стенд
 #kinput < font-size: 150%; box-sizing: border-box; width: 95%; >#area 

Игнорировать: keydown keypress keyup

Сфокусируйтесь на поле и нажмите какую-нибудь клавишу.

Событие keypress

Событие keypress возникает сразу после keydown , если нажата символьная клавиша, т.е. нажатие приводит к появлению символа.

Любые буквы, цифры генерируют keypress. Управляющие клавиши, такие как Ctrl , Shift , F1 , F2 … – keypress не генерируют.

Событие keypress позволяет получить код символа. В отличие от скан-кода, он специфичен именно для символа и различен для «z» и «я» .

Код символа хранится в свойствах: charCode и which . Здесь скрывается целое «гнездо» кросс-браузерных несовместимостей, разбираться с которыми нет никакого смысла – запомнить сложно, а на практике нужна лишь одна «правильная» функция, позволяющая получить код везде.

Получение символа в keypress

Кросс-браузерная функция для получения символа из события keypress:

// event.type должен быть keypress function getChar(event) < if (event.which == null) < // IE if (event.keyCode < 32) return null; // спец. символ return String.fromCharCode(event.keyCode) >if (event.which != 0 && event.charCode != 0) < // все кроме IE if (event.which < 32) return null; // спец. символ return String.fromCharCode(event.which); // остальные >return null; // спец. символ >

Для общей информации – вот основные браузерные особенности, учтённые в getChar(event) :

  1. Во всех браузерах, кроме IE, у события keypress есть свойство charCode , которое содержит код символа.
  2. Браузер IE для keypress не устанавливает charCode , а вместо этого он записывает код символа в keyCode (в keydown/keyup там хранится скан-код).
  3. Также в функции выше используется проверка if(event.which!=0) , а не более короткая if(event.which) . Это не случайно! При event.which=null первое сравнение даст true , а второе – false .

Модификаторы shift, alt, ctrl и meta

Во всех событиях объекты KeyboardEven t присутствует информация о нажатых клавишах-модификаторах.

Синтаксис
event.altKey event.ctrlKey event.metaKey // для Mac event.shiftKey
Возвращаемое значение

Свойство возвращает true , если нажата соответствующая клавиша, и false — в противном случае

Комментарии

Чтобы пользователи операционных систем работали с комфортом, в паре с ctrlKey нужно обязательно использовать metaKey .

В JS-коде это означает, что для удобства пользователей Mac нужно проверять

if (event.ctrlKey || event.metaKey)

charCode

Свойство charCode содержит код Юникода сгенерированного печатного символа для события keypress

Синтаксис
event.charCode
Возвращаемое значение
  • Число — код символа в Юникоде для событий keypress
  • 0 — для событий keydown и keyup .
Комментарии

Свойство не используется событиями «keydown» и «keyup».

Преобразовать код символа в Юникоде в строку можно с помощью метода String.fromCharCode().

Для событий keypress то же самое значение большинство броузеров записывают в свойство keyCode. Однако в Firefox свойство keyCode не определено для события keypress , поэтому следует использовать свойство charCode .

Данное свойство является нестандартным, отсутствует в модели событий IE8- и не имитируется в модели событий jQuery.

Для кроссбраузерного решения можно использовать следующий код:

var x = event.charCode || event.keyCode;

code

Свойство key возвращает строку, представлающее физическое расположение нажатой клавиши на клавиатуре.

Синтаксис
event.code
Комментарии

Свойство code представляет значение, которое не зависит ни от раскладки клавиатуры, ни от нажатия клавиш-модификаторов. Нажатию одной клавиши может соответствовать несколько различных символов, поэтому полученное значение не получится использовать для представления в виде текста.

Совместимость с браузерами
48,0 Нет 32,0 10,1 Да

key

Свойство key возвращает строку, представлающее значение клавиши, на которой возникло событие.

Синтаксис
event.key
Возвращаемое значение

Для событий клавиатуры, генерирующих символы, это свойство получает значение нажатой клавиши (такое как «a» , «W» , «4» , «+», «$», . ).

Для событий клавиатуры, не генерирующих символы, это свойство содержит имя нажатой клавиши (такое как, «Tab», «Down», . ).

Совместимость с браузерами
51,0 9,0 23,0 Да 38

keyCode

Свойство keyCode возвращает виртуальный код нажатой клавиши.

Синтаксис
event.keyCode
Возвращаемое значение
  • Число — код символа в Юникоде для событий keypress
  • Скан-код — для событий keydown и keyup .
Комментарии

В Firefox, свойство keyCode не работает на событие keypress (возаращает 0). Для кроссбраузерного решения можно использовать следующий код:

var x = event.charCode || event.keyCode;

Свойство keyCode не было стандартизовано, но определяется всеми броузерами, включая IE.

locale

Свойство locale определяет язык для событий клавиатуры и событий textinput.

Синтаксис
event.locale
Возвращаемое значение

Код языка (например, «en-GB»), идентифицирующий выбранную раскладку клавиатуры,если эта информация доступна.

Комментарии

Свойство locale поддерживается не всеми браузерами,

location

Свойство location определяет местоположение нажатой клавиши для событий клавиатуры.

Синтаксис
event.location
Возвращаемое значение

Возвращает число (константу), представляющее расположение клавиши на клавиатуре или другом устройстве ввода: 0. DOM_KEY_LOCATION_STANDARD Кнопка не нажата на правой или левой стороне клавиатуры, а также не была нажата на цифровой клавиатуре (это значение представляет почти все клавиши на клавиатуре, например , «A» , «U» , «SPACE» или «5» ) 1. DOM_KEY_LOCATION_LEFT Левая клавиша была нажата (например , левый «CTRL» или «ALT») 2. DOM_KEY_LOCATION_RIGHT Правая клавиша была нажата (например, правый «CTRL») 3. DOM_KEY_LOCATION_NUMPAD Клавиша была нажата на цифровой клавиатуре (например, «2» клавишу на правой стороне на стандартной клавиатуре) 4. DOM_KEY_LOCATION_MOBILE Клавиша была нажата на мобильном устройстве; это может быть либо физическая клавиатура, либо виртуальная клавиатура. 5. DOM_KEY_LOCATION_JOYSTICK Клавиша была нажата на игровом контроллере или джойстике на мобильном устройстве.

Совместимость с браузерами
Да 9,0 15,0 6,1 Да

which

Свойство which возвращает виртуальный код нажатой клавиши.

Синтаксис
event.which
Возвращаемое значение
  • Число — код символа в Юникоде для событий keypress
  • Скан-код — для событий keydown и keyup .
Комментарии

Свойство which в IE8-. Для этих версий браузера можно использовать свойство keyCode. Однако свойство keyCode не работает для события keypress в Firefox. Для кроссбраузерного решения можно использовать следующий код:

var x = event.which || event.keyCode;

Свойство which не стандартизовано и поэтому НЕ РЕКОМЕНДУЕТСЯ использовать.

Совместимость с браузерами
Да 9,0 15,0 5,1 10,10

Какое событие возникает при нажатии и отпускании любой клавиши

На этом шаге мы начнем рассматривать события, связанные с клавиатурой.

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

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

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

Важно четко представлять последовательность событий, происходящих при нажатии пользователем клавиши или комбинации клавиш. Пусть, например, пользователь нажал клавишу Shift (перевел ввод в верхний регистр), а затем нажал клавишу символа ‘н’. Последовательность событий для этого случая приведена таблице 2. В таблице указано, что именно можно распознать при каждом нажатии. Отметим, что различить символ в верхнем и нижнем регистрах и различить латинский символ и символ кириллицы можно только в обработчике события OnKeyPress . Действительно, хотя в событии OnKeyDown при нажатии клавиши ‘н’ можно определить, что при этом одновременно нажата и клавиша Shift , этого еще мало, чтобы утверждать, что символ относится к верхнему регистру. Ведь если перед этим была включена клавиш CapsLock , то при нажатой клавише Shift символ окажется в нижнем регистре. А информация о том, включена или выключена клавиша CapsLock , в обработчик события OnKeyDown не передается.

Таблица 2. Последовательность событий клавиатуры при нажатии клавиш Shift+н
Действие пользователя Событие
Нажатие клавиши Shift . OnKeyDown . Возможно распознавание нажатой клавиши Shift .
Нажатие клавиши «н». OnKeyDown . Возможно распознавание нажатой клавиши Shift , нажатой клавиши «н», но отличить верхний регистр от нижнего и латинский символ от русского невозможно.
OnKeyPress . Возможно распознавание символа с учетом регистра и языка, но невозможно распознавание нажатой клавиши Shift .
Отпускание клавиши «н». OnKeyUp . Возможно распознавание нажатой клавиши Shift , отпущенной клавиши «н», но отличить верхний регистр от нижнего и латинский символ от русского невозможно.
Отпускание клавиши Shift . OnKeyUp . Возможно распознавание отпущеной клавиши Shift .

Следует отметить, что событие OnKeyPress заведомо наступает, если нажимается только клавиша символа или клавиша символа при нажатой клавише Shift . Если же клавиша символа нажимается одновременно с какой-то из вспомогательных клавиш, то событие OnKeyPress может не наступить (произойдут только события OnKeyDown при нажатии и OnKeyUp при отпускании) или, если и наступит, то укажет на неверный символ. Например, при нажатой клавише Alt событие OnKeyPress при нажатии символьной клавиши не наступает. А при нажатой клавише Ctrl событие OnKeyPress при нажатии символьной клавиши наступает, но символ не распознается.

В заключение надо остановиться на вопросе, куда поступают события клавиатуры. У формы имеется свойство KeyPreview . Оно влияет на обработку событий, поступающих от клавиатуры (в число этих событий не входит нажатие клавиш со стрелками, клавиш табуляции и т.п.). По умолчанию свойство KeyPreview paвно false и события клавиатуры поступают на обработчики, предусмотренные в активном в данный момент компоненте. Но если задать значение KeyPreview равным trueе , то сначала эти события будут поступать на обработчики формы, если таковые предусмотрены, и только потом поступят на обработчики активного компонента.

Замечание. Имеется также событие OnShortCut приложения ( Application ), которое возникает при нажатии пользователем клавиши. Событие возникает до того, как возникло стандартное событие OnKeyDown компонента или формы. Это событие, как и все события приложения, перехватывает введенный в Delphi 5 компонент АрplicationEvents . Обработчик этого события позволяет предусмотреть нестандартную реакцию на нажатие какой-то клавиши. В него передается параметр сообщения Windows Msg , поле CharCode которого ( Msg.CharCode ) содержит виртуальный код нажатой клавиши. Передается также по ссылке параметр Handled . Если задать ему значение true , то стандартные события OnKeyDown, OnKeyPress, OnKeyUp не наступят.

Пусть, например, нужно, чтобы при нажатии пользователем клавиши «Q» приложение закрывалось, спросив предварительно пользователя, действительно ли он хочет закончить работу. Тогда обработчик события OnShortCut компонента ApplicationEvents может иметь вид:

Если пользователь нажал клавишу с символом «Q» (в любом регистре и независимо от установки русского или английского языка), то пользователю методом Application.MessageBox предлагается диалоговое окно с запросом о завершении работы. Если пользователь в нем нажмет кнопку Да , то приложение закрывается методом Application.Terminate .

На следующем шаге мы продолжим рассматривать события, связанные с клавиатурой.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *