Меню

Книга Delphi Учимся на примерах

OnKeyDown, OnKeyUp и OnKeyPress

Симфония на клавиатуре(статья)

Содержание материала

  • Симфония на клавиатуре(статья)
  • Страница 2
  • Страница 3
  • Все страницы

Перевод одноимённой статьи с сайта delphi.about.com )

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

События клавиатуры, наряду с событиями мыши, являются основными элементами взаимодействия пользователя с программой. В данной статье пойдёт речь о трёх событиях, которые позволяют отлавливать нажатия клавиш в приложении Delphi: OnKeyDown , OnKeyUp и OnKeyPress .

Для получения ввода с клавиатуры, приложения Delphi могут использовать два метода. Самый простой способ, это воспользоваться одним из компонентов, автоматически реагирущем на нажатия клавиш, таким как Edit. Второй способ заключается в создании процедур в форме, которые будут обрабатывать нажатия и отпускания клавиш. Эти обработчики могут обрабатывать как нажатия одиночных клавиш, так и комбинаций. Итак, вот эти события:

OnKeyDown — вызывается, когда на клавиатуре нажимается любая клавиша. OnKeyUp — вызывается, когда любая клавиша на клавиатуре отпускается. OnKeyPress — вызывается, когда нажимается клавиша, отвечающая за определённый ASCII символ.

Теперь самое время посмотреть, как выглядят в программе заголовки обработчиков:

(Sender: TObject; var Key: Word; Shift: TShiftState);

(Sender: TObject; var Key: Word; Shift: TShiftState);

(Sender: TObject; var Key: Char);

Все события имеют один общий параметр, обычно называемый Key . Этот параметр используется для передачи кода нажатой клавиши. Параметр Shift (в процедурах OnKeyDown и OnKeyUp), указывает на то, была ли нажата клавиша в сочетании с Shift , Alt , и Ctrl .

Фокус, это способность получать пользовательский ввод через мышь или клавиатуру. Получать события от клавиатуры могут только те объекты, которые имеют фокус. На форме активного приложения в один момент времени может быть активным (иметь фокус) только один компонент.

Некоторые компоненты, такие как TImage, TPaintBox, TPanel и TLabel не могут получать фокус, другими словами, это компоненты, наследованные от TGraphicControl. Так же не могут получать фокус невидимые компоненты, такие как TTimer.

События OnKeyDown и OnKeyUp обеспечивают самый низкий уровень ответа клавиатуры. Обработчики OnKeyDown и OnKeyUp могут реагировать на все клавиши клавиатуры, включая функциональные и комбинации с клавишами Shift, Alt, и Ctrl.

События клавиатуры — не взаимоисключающие. Когда пользователь нажимает клавишу, то генерируются два события OnKeyDown и OnKeyPress, а когда отпускает, то только одно: OnKeyUp. Если пользователь нажмёт одну из клавиш, которую OnKeyPress не сможет определить, то будет сгенерировано только одно событие OnKeyDown, а при отпускании OnKeyUp.

OnKeyPress возвращает различные значения ASCII для ‘g’ и ‘G,’. Однако, OnKeyDown и OnKeyUp не делают различия между верхним и нижним регистром.

Параметры Key и Shift

Параметр Key можно изменять, чтобы приложение получило другой код нажатой клавиши. Таким образом можно ограничивать набор различных символов, которые пользователь может ввести с клавиатуры. Например разрешить вводить только цифры. Для этого добавьте в обработчик события OnKeyPress следующий код и установите KeyPreview в True (см. ниже).

if Key in [ ‘a’ .. ‘z’ ] + [ ‘A’ .. ‘Z’ ] then Key:= #0

Это выражение проверяет, содержит ли параметр Key символы нижнего регистра (‘a’..’z’) и символы верхнего регистра (‘A’..’Z’). Если так, то в параметр заносится значение нуля, чтобы предотвратить ввод в компонент Edit (например).

В Windows определены специальные константы для каждой клавиши. Например, VK_RIGHT соответствует коду клавиши для правой стрелки.

Чтобы получить состояния специальных клавиш, таких как TAB или PageUp можно воспользоваться API функцией GetKeyState . Клавиши состояния могут находиться в трёх состояниях: отпущена, нажата, и включена. Если старший бит равен 1, то клавиша нажата, иначе отпущена. Для проверки этого бита можно воспользоваться API функцией HiWord . Если младший бит равен 1, то клавиша включена. Вот пример получения сосотояния специальной клавиши:

if HiWord(GetKeyState(vk_PageUp)) <> 0 then

ShowMessage( ‘PageUp — DOWN’ )

ShowMessage( ‘PageUp — UP’ );

В событиях OnKeyDown и OnKeyUp, Key является беззнаковым двухбайтовым (Word) значением, которое представляет виртуальную клавишу Windows. Для получания значения символа можно воспользоваться функцией Chr. В событии OnKeyPress параметр Key является значением Char, которое представляет символ ASCII.

События OnKeyDown и OnKeyUp имеют параметр Shift с типом TShiftState. В Delphi тип TShiftState определён как набор флагов, определяющих состояние Alt, Ctrl, и Shift при нажатии клавиши.

Например, следующий код (из обработчика OnKeyUp) соединяет строку ‘Ctrl +’ с нажатой клавишей и отображает результат в заголовке формы:

if ssCtrl in Shift then

Form1.Caption:= ‘Ctrl +’ + Chr(Key);

Если нажать Ctrl + A, то будут сгенерированы следующие события:

KeyDown (Ctrl) // ssCtrl

KeyDown (Ctrl+A) //ssCtrl + ‘A’

Переадресация событий клавиатуры в форму

Клавиатурный обработчик может работать на двух уровнях: на уровне компонентов и на уровне формы. Свойство формы KeyPreview определяет, будут ли клавиатурные события формы вызываться перед клавиатурными событиями компонентов, так как форма может получать все нажатия клавиш, предназначенные для компонента имеющего в данный момент фокус.

Чтобы перехватить нажатия клавиш на уровне формы, до того как они будут переданы компонентам на форме, необходимо установить свойство KeyPreview в True. После этого компонент как и раньше будет получать события, однако сперва они будут попадать в форму, чтобы дать возможность программе разрешить или запретить ввод различных символов.

Допустим, У Вас на форме есть несколько компонентов Edit и процедура Form.OnKeyPress выглядит следующим образом:

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

if Key in [ ‘0’ .. ‘9’ ] then Key := #0

Если один из компонентов Edit имеет фокус и свойство KeyPreview установлено в False, то этот код не будет выполнен — другими словами, если пользователь нажмёт клавишу ‘5’, то в компоненте Edit, имеющем фокус, появится символ «5».

Однако, если KeyPreview установлено в True, то событие формы OnKeyPress будет выполнено до того, как компонент Edit увидит нажатую клавишу. Поэтому, если пользователь нажмёт клавишу ‘5’, то в Key будет подставлено нулевое значение, предотвращая тем самым попадание числовых символов в Edit.

ПРИЛОЖЕНИЕ: Таблица кодов виртуальных клавиш.

Symbolic
constant name
Value
(hexadecimal)
Keyboard (or mouse) equivalent
VK_LBUTTON 01 Left mouse button
VK_RBUTTON 02 Right mouse button
VK_CANCEL 03 Control-break processing
VK_MBUTTON 04 Middle mouse button (three-button mouse)
VK_BACK 08 BACKSPACE key
VK_TAB 09 TAB key
VK_CLEAR 0C CLEAR key
VK_RETURN 0D ENTER key
VK_SHIFT 10 SHIFT key
VK_CONTROL 11 CTRL key
VK_MENU 12 ALT key
VK_PAUSE 13 PAUSE key
VK_CAPITAL 14 CAPS LOCK key
VK_ESCAPE 1B ESC key
VK_SPACE 20 SPACEBAR
VK_PRIOR 21 PAGE UP key
VK_NEXT 22 PAGE DOWN key
VK_END 23 END key
VK_HOME 24 HOME key
VK_LEFT 25 LEFT ARROW key
VK_UP 26 UP ARROW key
VK_RIGHT 27 RIGHT ARROW key
VK_DOWN 28 DOWN ARROW key
VK_SELECT 29 SELECT key
VK_PRINT 2A PRINT key
VK_EXECUTE 2B EXECUTE key
VK_SNAPSHOT 2C PRINT SCREEN key
VK_INSERT 2D INS key
VK_DELETE 2E DEL key
VK_HELP 2F HELP key
30 0 key
31 1 key
32 2 key
33 3 key
34 4 key
35 5 key
36 6 key
37 7 key
38 8 key
39 9 key
41 A key
42 B key
43 C key
44 D key
45 E key
46 F key
47 G key
48 H key
49 I key
4A J key
4B K key
4C L key
4D M key
4E N key
4F O key
50 P key
51 Q key
52 R key
53 S key
54 T key
55 U key
56 V key
57 W key
58 X key
59 Y key
5A Z key
VK_NUMPAD0 60 Numeric keypad 0 key
VK_NUMPAD1 61 Numeric keypad 1 key
VK_NUMPAD2 62 Numeric keypad 2 key
VK_NUMPAD3 63 Numeric keypad 3 key
VK_NUMPAD4 64 Numeric keypad 4 key
VK_NUMPAD5 65 Numeric keypad 5 key
VK_NUMPAD6 66 Numeric keypad 6 key
VK_NUMPAD7 67 Numeric keypad 7 key
VK_NUMPAD8 68 Numeric keypad 8 key
VK_NUMPAD9 69 Numeric keypad 9 key
VK_SEPARATOR 6C Separator key
VK_SUBTRACT 6D Subtract key
VK_DECIMAL 6E Decimal key
VK_DIVIDE 6F Divide key
VK_F1 70 F1 key
VK_F2 71 F2 key
VK_F3 72 F3 key
VK_F4 73 F4 key
VK_F5 74 F5 key
VK_F6 75 F6 key
VK_F7 76 F7 key
VK_F8 77 F8 key
VK_F9 78 F9 key
VK_F10 79 F10 key
VK_F11 7A F11 key
VK_F12 7B F12 key
VK_F13 7C F13 key
VK_F14 7D F14 key
VK_F15 7E F15 key
VK_F16 7F F16 key
VK_F17 80H F17 key
VK_F18 81H F18 key
VK_F19 82H F19 key
VK_F20 83H F20 key
VK_F21 84H F21 key
VK_F22 85H F22 key
VK_F23 86H F23 key
VK_F24 87H F24 key
VK_NUMLOCK 90 NUM LOCK key
VK_SCROLL 91 SCROLL LOCK key
VK_LSHIFT A0 Left SHIFT key
VK_RSHIFT A1 Right SHIFT key
VK_LCONTROL A2 Left CONTROL key
VK_RCONTROL A3 Right CONTROL key
VK_LMENU A4 Left MENU key
VK_RMENU A5 Right MENU key
VK_PLAY FA Play key
VK_ZOOM FB Zoom key
Читайте также:  Примеры программного обеспечения электронные таблицы

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

Не использовать не нормативную лексику.

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

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!

Источник

Таблица клавиш для delphi

Оглавление книги Популярные страницы Скачать книгу Купить книгу

Данная книга — продолжение предыдущей книги автора, «Delphi. Только практика». Также как и в «Delphi. Только практика», в данном издании подробно рассмотрены программы для сетей, различные шуточные программы, простые игрушки, некоторые полезные приложения, разработка приложений в стиле Windows XP. В частности, здесь можно найти такие примеры как бесплатная отправка SMS, FTP-клиент, простое шифрование, CGI-сценарии и многое другое. Описаны методы работы с системным реестром Windows и INI-файлами, а также некоторые важные аспекты программирования на системном уровне с применением функций Windows API. Для облегчения понимания программ каждый пример содержит комментарии сложных строк кода.

Книга ориентирована как на тех, кто уже имеет опыт создания приложений в Delphi, так и на начинающих программистов. Для начинающих пользователей Delphi в конце книги добавлено приложение с описанием синтаксиса языка программирования Object Pascal.

Книга: Delphi. Учимся на примерах

Приложение А Коды клавиш и их значения

Коды клавиш и их значения

Коды клавиш в десятичном и шестнадцатиричном представлении, а также соответствующие константы и функции Ord перечислены в табл. А.1.

Таблица А.1. Коды клавиш и соответствующие константы

Источник



Комбинации клавиш в Delphi — горячие клавиши в среде программирования Delphi

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

Клавиши редактора кода в Delphi

Клавиша Назначение клавиш Версия Delphi
Ctrl + J Выбор code-template. Вставка шаблона кода. Можно вставлять типовые шаблоны, а можно написать свои собственные. При нажатии Ctrl + J, будет показан список шаблонов. Либо можно набрать несколько букв из имени шаблона, чтобы ограничить выбор, либо полное имя шаблона и нажать комбинацию — шаблон сразу вставится.
Например набираем try и жмём. Нам предложат варианты конструкции try. Или набираем classc, жмём — получаем готовую заготовку для описания класса.
5
Ctrl + Shift + C Class Completion. Одна из важнейших комбинаций при описании класса. Закончив базовое описание класса, нажимаем комбинацию. Автоматически создадутся все описанные методы в разделе implementation, для всех property создадутся приватные поля и сеттеры. 5
Ctrl + Shift + V Автоматическое объявление переменной. При написании функции можно написать код, не прописывая заранее переменные в var. Потом установить курсор на переменную и нажать данную комбинацию. Автоматически будет создан раздел var (при необходимости), и в нём будет помещено описание переменной. В случае, когда по коду нельзя точно определить тип переменной, будет вызвано уточняющее окошко. Впрочем оно редко ошибается с типом и я обычно сразу подтверждаю по Enter. 2006
Ctrl + пробел Вызов CodeCompletion (того, который автоматом появляется после нажатия точки после имени объекта/класса).
При нажатии на пустом месте, показывает объекты/класса/функции/процедуры/методы и т.д., которые мы можем использовать в данном месте.
При нажатии в объявлении класса, показывает методы, которые можно пронаследовать от родительского класса.
5
Ctrl + Shift + пробел Показывает всплывающий хинт, подсказывающий параметры функции. 5
Ctrl + Shift + Enter Если встать на имя функции и нажать комбинацию, то будут найдены все места в проекте, где она используется. 2005
Ctrl + Shift + G Вставить GUID
Ctrl + Shift + T Вставляет в текущую позицию заметку ToDo. Все расставленные заметочки можно потом смотреть через ToDo-List и осуществлять навигацию по ним.
Для тех, кто не в курсе — ToDo означает «Нужно сделать». То есть расставляем себе заметочки, что тут нужно сто-то сделать или доработать.
5
Ctrl + Shift + A Добавляет в uses нужный модуль. Например у Вас есть код, но дельфи ругается, что она не знает, что это за функция или константа и т.п. Просто ставим на неё курсор и жмём комбинацию. Дельфи сама найдёт модуль, где она объявлена и добавит его в uses 2005
Ctrl+O+O Вставить в код директивы компилятора, соответствующие текущим настройкам проекта 5
Читайте также:  Наставление по стрелковому делу НСД 40 82БМ 82 мм батальонный миномет 3 стр

Клавиши редактирования в Delphi

Клавиша Назначение Версия Delphi
Ctrl + T Удалить слово в позиции курсора 5
Ctrl + Y Удалить текущую строку 5
Ctrl + Shift + Y Удалить текст от позиции курсора до конца строки 5
Ctrl+N Вставить строку 5
Ctrl + Shift + I Увеличить отступ выбранного текста от левого края 5
Ctrl + Shift + U Уменьшить отступ выбранного текста 5
Ctrl + / Закомментировать или раскомментировать выделенный блок текста 2005
Ctrl + Shift + R Начать/завершить запись макроса 1
Ctrl + Shift + P Воспроизвести макрос 1
Ctrl+K+E Перевести слово в нижний регистр 5
Ctrl+K+F Перевести слово в верхний регистр 5
Shift + Навигация Выделить часть кода (Shift + мышь,вверх, влево, Home и т.д) 1
Shift + Alt + Навигация Аналогично предыдущей, но выделяет прямоугольную часть кода. 1
Ctrl+O+C Включить режим блочного выделения 1
Ctrl+O+K Включить режим поточного выделения 1
Ctrl + Del Удалить выделенное 1
Ctrl + BackSpace Стересть слово перед курсором 1

Клавиши навигации по коду в Delphi

Клавиша Назначение клавиш Версия Delphi
Ctrl + F Поиск 3
F3 Продолжение поиска 3
Ctrl + E Инкрементный поиск. Поиск без диалога — нажимаете комбинацию и начинаете набирать текст. Навигация сама побежит по коду в поисках слова. Если слово найдено, но нужно найти в другом месте — также работает F3. 5
Alt + [ Ищет открывающую скобку для закрывающей скобки, перед которой стоит курсор 5
Alt + ] Ищет закрывающую скобку для открывающей скобки, перед которой стоит курсор 5
Alt + Влево Назад по истории перемещений. Возвращает в то место кода, откуда мы перешли. 7
Alt + Вправо Вперёд по истории перемещений. Результат обратный предыдущей комбинации. Действует только после её использования. 7
Alt + Вверх Выполняет действие, аналогичное удержанию Ctrl + клик мышкой по слову — происходит переход на его декларацию. Например, установив курсор на слово TLabel и нажав комбинацию, мы попадём туда, где описан класс TLabel. Данный переход помещается в историю перемещений. Вернуться обратно можно по Alt + Влево. 7
Ctrl + Shift + Вверх Переход между описанием процедуры/функции/метода в и его/её реализацией 5
Ctrl + Shift + Вниз Аналогично предыдущей 5
Ctrl + Alt + Верх Переход к реализации предыдущего метода класса (в алфавитном порядке). То есть, просматривая код метода, мы можем перейти к реализации предыдущего (по алфавиту) метода этого же класса 2006
Ctrl + Alt + Вниз Переход к реализации следующего метода класса (в алфавитном порядке). 2006
Ctrl + Alt + Home Переход к реализации первого метода класса (в алфавитном порядке) 2006
Ctrl + Alt + End Переход к реализации последнего метода класса (в алфавитном порядке) 2006
Ctrl + F12 Открывает окно со списком юнитов проекта. 1
Shift + F12 Открывает окно со списком форм 1
Ctrl + Tab Переход к следующему открытому юниту в порядке следования их на закладках 1
Ctrl + Shift + Tab Переход к предыдущему открытому юниту в порядке следования их на закладках 1
Ctrl + Alt + F12 Выпадающее меню со списком открытых юнитов 2006
Ctrl + F4 Закрыть текущий юнит 1
Alt + G Перейти на строку с номером . 1
Ctrl + Вверх Скролит экран на строку вверх 1
Ctrl + Вниз Скролит экран на строку вниз 1
CodeFolding Ниже клавиши, относящиеся к сворачиванию кода в Delphi 2005 и выше 2005
Ctrl+Shift K+A Развернуть всё 2005
Ctrl+Shift K+E Свернуть блок кода 2005
Ctrl+Shift K+U Развернуть блок кода 2005
Ctrl+Shift K+T Переключение состояния свёрнутый/развёрнутый 2005
Ctrl+Shift K+O Выключить CodeFolding 2005

Клавиши общей навигациив Delphi

Клавиша Назначение Версия Delphi
F12 Переключение между окном кода и визуальным редактором формы 3
Alt + F12 Переключение на просмотр формы в текстовом виде (dfm) и обратно 3
F11 Переключиться на Object Inspector 3
Ctrl + Alt + F11 Открыть менеджер проектов 5
Shift + Alt + F11 Открыть окно структуры 2005
Ctrl + Alt + P Переключиться на палитру инструментов 2005
Ctrl + Shift + B Открывает на окно эксплорера проекта 5
Ctrl + Alt + V Открыть окно лога событий 5
Ctrl + Shift + F Найти в файлах. Производит поиск выражения в файлах проекта, в каталоге и т.п. по выбору. 5
Alt + F7 Переход к предыдущему найденному при помощи Ctrl + Shift + F 5
Alt + F8 Переход к следующему найденному при помощи Ctrl + Shift + F 5
Ctrl + Enter При нажатии на юните из списка uses, открывает его на новой закладке. При нажатии в другом месте, происходит вызов команды Open главного меню. 5
Alt + F11 Если открыт юнит, эта комбинация покажет диалог добавления юнита, где можно будет выбрать, к каким модулям его добавить 5

Клавиши отладки в Delphi

Перевозка и таможенное оформление сборных и контейнерных грузов из стран Азии:

— доставка всех видов грузов из Азии;
— растаможка груза любой сложности;
— минимальные сроки доставки грузов.

Для расчёта стоимости направьте запрос на эл.почту

Перевозка сборных грузов — Транспортная группа MSC предоставляет регулярный сервис перевозки сборных грузов в контейнерах LCL из Китая и стран Юго-Восточной Азии в Российскую Федерацию на условиях FOB, FCA и EXW.

— Морские перевозки грузов
— Контейнерные перевозки
— Железнодорожные перевозки
— Перевозка сборных грузов
— Таможенное оформление
— Рефрижераторные перевозки
— Комплексные логистические решения
— Проектная логистика

Официальная растаможка компания MSC

Перевозка сборных грузов — Транспортная группа MSC предоставляет регулярный сервис перевозки сборных грузов в контейнерах LCL из Китая и стран Юго-Восточной Азии в Российскую Федерацию на условиях FOB, FCA и EXW.

— Морские перевозки грузов
— Контейнерные перевозки
— Железнодорожные перевозки
— Перевозка сборных грузов
— Таможенное оформление
— Рефрижераторные перевозки
— Комплексные логистические решения
— Проектная логистика

Источник

Delphi 2010. Работа с клавиатурой в условиях Unicode.

Как я уже отмечал, начиная с Delphi 2009 введена полная поддержка Unicode. Это замечательно, необходимо и важно. Однако, как ни крути, но не все толком понимают как работать-то? Я сейчас не имею ввиду профессиональных программистов, работающих постоянно с Delphi. Речь идёт о простых любителях, начинающих программистах, которые большую часть информации получают из Сети, в результате чего возникают всякие непредвиденные ситуации. Вот, например, ситуация – надо написать программу, которая будет отлавливать нажатия клавиш клавиатуры и записывать их в лог. В Интернет есть масса примеров как организовать глобальный хук на клаву и считывать в лог виртуальные и скан-коды клавиш (подобная статья есть и у нас в блоге). Естественно, начинающий программист просто качает готовый пример и пробует транслировать эти самые коды в буковки…а они просто так не транслируются – получаем либо “кракозябры” либо нормальные буквы но не те. И сидит такой начинающий программист, чешет затылок и другие части тела, не понимая что он делает не так? В лучшем случае лезет в опять в Сеть и с огромной вероятностью натыкается на подобного рода “рецепты-объяснения”:

В событиях OnKeyDown и OnKeyUp, Key является беззнаковым двухбайтовым (Word) значением, которое представляет виртуальную клавишу Windows. Для получания значения символа можно воспользоваться функцией Chr. В событии OnKeyPress параметр Key является значением Char, которое представляет символ ASCII.

Вроде все правильно. НО не для Delphi 2009-2010, при работе с русскими символами, так как во-первых, введена поддержка Unicode, а во-вторых ASCII никогда с роду не содержала русских букв (см.историю разработки кодировок). И никогда, ни при каких обстоятельствах Вы не сможете перевести просто так виртуальную клавишу в русский символ функцией Chr.

Если не верите – проделайте такой простой эксперимент: откройте Delphi 2009-2010, создайте новое приложение и в событии onKeyUp для главной формы напишите такой код:

Читайте также:  Погрешность измерения температуры термопарой

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

Вот результат нажатия русской буквы “Ы”:

S
Спрашивается: Чё за фигня? Где моя буковка “Ы”? И, что самое интересное, я ведь нажимал букву без Shift и CapsLock, а мне чего-то буква в верхнем регистре упала? Давайте разбираться в определениях. Так как без четкого знания определений мы с Вами в этих лабиринтах и хитросплетениях не разберемся никогда.

1. Скан-коды, виртуальные код и коды символов

Итак, с клавиатурой связано как минимум три разновидности кодов: скан-код, символьный код и виртуальный код. И далеко не все начинающие программисты понимают различия между ними.
Самая большая путаница со скан-кодами. Для начала, их существует две разновидности. Есть скан-коды “настоящие” – это то, что получает система прямо от клавиатуры, а есть скан-коды которые выдаются после того, как они будут обработаны в BIOS, которая интерпретирует, например, одновременное нажатие клавиш-модификаторов, а также справляется с текущей таблицей кодов символов и отправляет эти скан-коды в буфер клавиатуры.
Теперь посмотрим, как выглядит скан-код в принципе. На рисунке представлена оригинальная 84-кнопочная клавиатура IBM PC. Вот во времена существования этой клавиатуры и назначались скан-коды клавишам. Причем присваивались они слева-направо, начиная с клавиши Esc. Так клавиша Esc получила скан-код 1, а клавиша 1 – код 2 и т.д. Пока не будем кидаться в дебри дополнительных клавиш, которые появились на современных клавиатурах (там есть свои особенности присвоения скан-кодов), а уясним для себя следующее:

Скан-код – это идентификатор клавиши на клавиатуре и он один в чистом виде никак не может сам по себе описать символ в условиях unicode

Теперь двигаемся дальше. Разберемся с виртуальными кодами.

Виртуальные коды – это то, что использует система (Windows) для идентификации клавиш.

То есть, проведя простую аналогию, можно с большим допущением сказать, что виртуальный код клавиши – это тот же скан-код, но только не для BIOS, а для операционной системы, установленной на компьютере пользователя.

С некоторыми из констант, определяющих виртуальный код клавиш Вы можете ознакомиться в модуле windows.pas Delphi. Но, там отсутствуют коды для буквенно-цифровых клавиш, т.к. они совпадают с соответствующими символами из таблицы ASCII .

Теперь, я думаю, становится более-менее ясно почему при нажатии клавиши с буквой “ы” мы в примере получили заглавную букву “S”? Delphi в этом случае сработала идеально правильно – выдала именно виртуальный код клавиши, как и полагается.

А для того, чтобы получить русскую букву нам необходимо знать третий код – код символа в таблице символов Unicode или, как мы посмотрим ниже, скан-код, виртуальный код и ещё один параметр – состояние клавиатуры.

Для того, чтобы продемонстрировать правильность работы Delphi, немного допишем наш пример.

Источник

Приложение 1 Коды и обозначения основных клавиш

Приложение 1 Коды и обозначения основных клавиш

В табл. П1.1 приведены коды, обозначения целочисленных констант и описания основных клавиш.

. 1 . Коды, обозначения и описания клавиш

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Читайте также

Приложение Г Различные исходные коды

Приложение Г Различные исходные коды Г.1. Заголовочный файл unp.h Почти каждая программа в этой книге начинается с подключения заголовочного файла unp.h, показанного в листинге Г.1[1]. Этот файл подключает все стандартные системные заголовочные файлы, необходимые для работы

Приложение 2. Сочетания клавиш, используемые в Internet Explorer

Приложение 2. Сочетания клавиш, используемые в Internet

Приложение 2 Сочетания клавиш в Microsoft Office Word

Приложение 2 Сочетания клавиш в Microsoft Office Word Создание, просмотр и сохранение документов Поиск, замена и переходы Печать и предварительный просмотр документов Рецензирование документов Режим полноэкранного чтения Вставка специальных знаков и

Обозначения

Обозначения Вот конструкции, используемые в программах этой книги.Оператор присваивания. В нем используется знак «:=»i := i + 1Вот его аналоги на других языках:Бейсик: LET I = I + 1LSE: I ? I + 1Паскаль: I := I + 1Условный оператор имеет видЕСЛИ условие ТО последовательность операторов

Приложение 2. Основные сочетания клавиш 3ds Max 2008

Приложение 2. Основные сочетания клавиш 3ds Max 2008 Работа в программе станет значительно эффективнее, если вы будете пользоваться сочетаниями клавиш для выполнения операций.Для быстрого ознакомления с основными клавиатурными комбинациями интерфейса программы выполните

Приложение 10. Коды ошибок

Приложение 10. Коды ошибок Коды ошибок, возвращаемые клиентам или модулям PSQL сервером Firebird 1.5.0, представлены в табл. П10.1. Некоторые коды недоступны в более ранних версиях Firebird. Важно убедиться, что сервер и клиент имеют корректную версию файла firebird.msg (interbase.msg для Firebird 1.0.x),

Приложение C. Коды завершения, имеющие предопределенный смысл

Приложение C. Коды завершения, имеющие предопределенный смысл Таблица C-1. «Зарезервированные» коды завершения Код завершения Смысл Пример Примечание 1 разнообразные ошибки let «var1 = 1/0» различные ошибки, такие как «деление на ноль» и пр. 2 согласно документации к Bash —

Обозначения

Обозначения Ниже перечислены обозначения, используемые в данной книге.? attributeОбязательный атрибут.? attributeНеобязательный атрибут.? attribute=»строка»Атрибут со строковым параметром.? attribute=»<строка>«Атрибут со строковым параметром, значение которого является шаблоном

Обозначения

Обозначения Прототип функции имеет следующий синтаксис:тип1 функция(тип2, тип3, тип4?)Здесь тип1 — тип возвращаемого значения, тип2, тип3, тип4 — типы передаваемых параметров.При этом символ «?» обозначает аргумент, который может быть опущен, а символ * служит для обозначения

Виртуальные коды клавиш

Приложение B КОДЫ ВАЖНЫХ ТРАНЗАКЦИЙ

Приложение B КОДЫ ВАЖНЫХ ТРАНЗАКЦИЙ В следующей таблице перечислены коды наиболее важных транзакций для системного администрирования R/3 Можно вводить коды транзакций R/3 в поле команды SAP GUI Доступны следующие параметры:? /n Выход из активной в данный

Приложение Д Коды ошибок DOS

Приложение Д Коды ошибок DOS 2 – файл не найден3 – путь доступа не найден5 – доступ отвергнут6 – недопустимая обработка8 – недостаточно памяти10 – недопустимая программная среда11 – неверный формат18 – файлы

Источник