Bazaprogram.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Код клавиши enter delphi

Коды клавиш Delphi

Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :

Клавиша

Дес.

число

Шест.

число

Символическое

имя

Сравнение по

функции ordF1112$70VK_F1F2113$71VK_F2F3114$72VK_F3F4115$73VK_F4F5116$74VK_F5F6117$75VK_F6F7118$76VK_F7F8119$77VK_F8F9120$78VK_F9F10121$79VK_F10пробел32$20VK_SPACEBackSpace8$8VK_BACKTab9$9VK_TABEnter13$0DVK_RETURNShift16$10VK_SHIFTCtrl17$11VK_CONTROLAlt18$12VK_MENUCapsLock20$14VK_CAPITALEsc27$1BVK_ESCAPEInsert45$2DVK_INSERTPageUp33$21VK_PRIORPageDown34$22VK_NEXTEnd35$23VK_ENDHome36$24VK_HOMEСтрелка назад37$25VK_LEFTСтрелка вверх38$26VK_UPСтрелка вперед39$27VK_RIGHTСтрелка вниз40$28VK_DOWNDelete46$2EVK_DELETEPrintScreen44$2CVK_SNAPSHOTScrollLock145$91VK_SCROLLPause19$13VK_PAUSENumLock144$90VK_NUMLOCK0,)48$30Ord(‘0’)1!49$31Ord(‘1’)2@50$32Ord(‘2’)3#51$33Ord(‘3’)4$52$34Ord(‘4’)5%53$35Ord(‘5’)6^54$36Ord(‘6’)7&55$37Ord(‘7’)8*56$38Ord(‘8’)9(57$39Ord(‘9’)`

192$C0-_189$BD=+187$BB[ <219$DB]>221$DD:;186$BA‘”222$DE|220$DC,190$BE/?191$BFA a65$41Ord(‘A’)B b66$42Ord(‘B’)С с67$43Ord(‘С’)D d68$44Ord(‘D’)E e69$45Ord(‘E’)F f70$46Ord(‘F’)G g71$47Ord(‘G’)H h72$48Ord(‘H’)I i73$49Ord(‘I’)J j74$4AOrd(‘J’)K k75$4BOrd(‘K’)L l76$4COrd(‘L’)M m77$4DOrd(‘M’)N n78$4EOrd(‘N’)O o79$4FOrd(‘O’)P p80$50Ord(‘P’)Q q81$51Ord(‘Q’)R r82$52Ord(‘R’)S s83$53Ord(‘S’)T t84$54Ord(‘T’)U u85$55Ord(‘U’)V v86$56Ord(‘V’)W w87$57Ord(‘W’)X x88$58Ord(‘X’)Y y89$59Ord(‘Y’)Z z90$5AOrd(‘Z’)

Правая клавиатура при выключенной клавише NumLock:

Код клавиши enter delphi

На этом шаге мы рассмотрим способы определения нажатых клавиш.

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

Параметр Sender , указывающий на источник события, уже рассматривался на шаге 6. Там же рассматривался и параметр Shift , представляющий собой множество элементов, отражающих нажатые в это время функциональные клавиши. Только в обработчике события OnKeyDown множество возможных элементов параметра Shift сокращено до:

  • ssShift (нажата клавиша Shift ),
  • ssAlt (нажата клавиша Alt ) и
  • ssCtrl (нажата клавиша Ctrl ).

Информация о нажатых кнопках мыши отсутствует.

Основной параметр, которого не было раньше — это параметр Key . Обратите внимание, что он определен как var , т.е. может изменяться в обработчике события. Кроме того, обратите внимание, что это целое число, а не символ.

Параметр Key определяет нажатую в момент события клавишу клавиатуры. (Для не алфавитно-цифровых клавиш используются виртуальные коды API Windows . Полная таблица этих кодов приведена в приложении 2. Ниже в таблице 1 приведены для дальнейшего обсуждения только несколько строк из нее, соответствующих наиболее распространенным клавишам.

Параметр Key является целым числом, определяющим клавишу, а не символ . Например, один и тот же код соответствует прописному и строчному символам «Y» и «y» . Если, как это обычно бывает, в русской клавиатуре этой клавише соответвуют символы кириллицы «Н» и «н» , то их код будет тем же самым. Различить прописные и строчные символы или символы латинские и кириллицы невозможно .

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

Можно сравнивать Key и с шестнадцатеричным эквивалентом кода, приведенным в третьем столбце таблицы 1. Например, приведенный выше оператор можно записать в виде:

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

Для клавиш символов и цифр можно производить проверку сравнением c десятичным или шестнадцатеричным кодом, но это не очень удобно, так как трудно помнить коды различных символов. Другой путь — воспользоваться функций ord , определяющей код символа. Коды латинских символов в верхнем pегистре совпадают с виртуальными кодами, используемыми в параметре Key . Поэтому, например, если вы хотите распознать клавишу, соответствующую символу «Y» , можете написать:

В этом операторе можно использовать только латинские символы в верхнем регистре. Если вы напишете ord(‘y’) или захотите написать русские символы, соответствующие этой клавише — ord(‘Н’) или ord(‘н’) , то оператор не сработает.

Помните также, что оператор будет действовать на все символы, относящиеся к указанной клавише: «Y», «у», «Н» и «н». Иногда это хорошо, а иногда плохо. Например, если вы задали пользователю какой-то вопрос, на который он должен ответить Y (да) или N (нет), то подобный оператор избавляет пользователя от необходимости следить, в каком регистре он вводит символ и какой язык — английский или русский включен в данный момент. Ему достаточно просто нажать клавишу, на которой написано «Y» . Однако, если пользователь более привык к символам кириллицы, то могут возникнуть неприятности, поскольку нажимая клавишу с латинской буквой «Y» и русской буквой «Н» он может думать, что отвечает не положительно ( Yes — да), а отрицательно (Нет).

Приведем еще один пример — автоматическую передачу фокуса очередному оконному компоненту при нажатии пользователем клавиши Enter . Это можно сделать, включив в общий обработчик событий OnKeyDown всех оконных компонентов оператор:

Этот оператор с помощью метода FindNextControl ищет очередной компонент в последовательности табуляции и передает ему фокус.

В заключение приведем пример распознавания комбинации клавиш. Пусть вы хотите, например, распознать комбинацию Alt-X . Для этого вы можете написать оператор:

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

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 для главной формы напишите такой код:

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

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


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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Net httpclient delphi
Ссылка на основную публикацию
Adblock
detector