коды кнопок клавиатуры 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:

Источник

Коды виртуальных клавиш

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

Windows 2000/XP: для американской стандартной клавиатуры это клавиша ‘;:’. VK_OEM_PLUSBBWindows 2000/XP: для любой страны/региона это клавиша ‘+‘.VK_OEM_COMMABCWindows 2000/XP: для любой страны/региона это клавиша ‘,’. VK_OEM_MINUSBDWindows 2000/XP: для любой страны/региона это клавиша ‘‘. VK_OEM_PERIODBEWindows 2000/XP: для любой страны/региона это клавиша ‘.’.VK_OEM_2BFИспользуется для разных знаков; он может изменяться клавиатурой.

Windows 2000/XP: для американской стандартной клавиатуры это клавиша ‘/?’. VK_OEM_3C0Используется для разных знаков; он может изменяться клавиатурой.

Windows 2000/XP: для американской стандартной клавиатуры это клавиша ‘`

Источник

Коды кнопок клавиатуры delphi

На сколько мне известно, у клавиш как пробел, enter и т.п., а так же вроде и у букв в Delphi есть коды(#n, n-номер). Где их можно найти. Меня в данном случае интересует пробел(как можно определить
нажатие пробела например в OnKeyPress if Key=#код нажатия на пробел then. ), но хорошо бы и знать другие коды. Где их можно найти?

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
Джо © ( 2006-08-17 21:37 ) [1]

> Где их можно найти?

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
ShowMessage (IntToStr(Ord(Key)))
end;

Net, ja imeju vvidu, naprimer, nazhat enter, ja ze ne napishu v OnKeyPress «if key=Enter then. «, eto zhe budet Undeclared identifier, a kak togda, vo chto ja imeju vvidu.

> [3] Alral © (17.08.06 21:42)
> Net, ja imeju vvidu, naprimer, nazhat enter, ja ze ne napishu
> v OnKeyPress «if key=Enter then. «, eto zhe budet Undeclared
> identifier, a kak togda, vo chto ja imeju vvidu.

Код, приведенный в посте [1] и предназначен для того, чтобы узнать искомый код нажимаемой клавиши.

А как сеняются коды клавишь, когда они нажимаются вместе с шифтом или контролом или альтом?

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
Джо © ( 2006-08-17 23:40 ) [7]

> [6] Галинка © (17.08.06 23:25)
> А как сеняются

А что это? 🙂

Извините, меняются конечно )))

Галинка © (17.08.06 23:25) [6]


> для Shift (и CapsLock) цифр и символов

для Shift (и CapsLock) при нажатии клавиш, соответствующих цифрам и символам


> Коды клавиш

case Key of
VK_CANCEL: tempstr := «CANCEL»;
VK_BACK: tempstr := «BACKSPACE»;
VK_TAB: tempstr := «TAB»;
VK_CLEAR: tempstr := «CLEAR»;
VK_RETURN: tempstr := «ENTER»;
VK_PAUSE: tempstr := «PAUSE»;
VK_CAPITAL: tempstr := «CAPS LOCK»;
VK_ESCAPE: tempstr := «ESC»;
VK_SPACE: tempstr := «SPACEBAR»;
VK_PRIOR: tempstr := «PAGE UP»;
VK_NEXT: tempstr := «PAGE DOWN»;
VK_END: tempstr := «END»;
VK_HOME: tempstr := «HOME»;
VK_LEFT: tempstr := «LEFT ARROW»;
VK_UP: tempstr := «UP ARROW»;
VK_RIGHT: tempstr := «RIGHT ARROW»;
VK_DOWN: tempstr := «DOWN ARROW»;
VK_SELECT: tempstr := «SELECT»;
VK_EXECUTE: tempstr := «EXECUTE»;
VK_SNAPSHOT: tempstr := «PRINT SCREEN»;
VK_INSERT: tempstr := «INS»;
VK_DELETE: tempstr := «DEL»;
VK_HELP: tempstr := «HELP»;

Еще раз. Что я должна видеть? Ну, например, набираю я шоткат Alt+E (обычно выход из программы). Какой код будет сгененрирован?

> вместе с шифтом или контролом или альтом?

if (ssCtrl in Shift) and (key=. ) then.

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

Никакого бардака.
В keydown»е код нажатой клавише, в keypress»е символ, если конечно это символ.

Символ зависит еще и от текущего языка, статуса shift и capslock. Естесственно его не может быть в keydown.

в [14] показано, как уотловить нажатие клавиши вместе с контролом

С контролом понятно. А с альтом?

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
clickmaker © ( 2006-08-21 17:52 ) [21]

ЗЫ. Как здесь любят говорить «Я плякал»

Разобралась вроде. С контролом или альтом отлавливается код заглавной буквы латинского алфавита. Вне зависимости от выбранной раскладки клавиатуры. Т.е. это первый ASCII код, относящийся к нажатой клавише.

А как поймать нажатие функциональных клавишь F1-F12?

Ну звыняйте. Я уже два года с Дельфи не работала. Я вообще два года уже не работаю. Навыки однако теряются.

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
clickmaker © ( 2006-08-21 18:30 ) [25]


> А как поймать нажатие функциональных клавишь F1-F12?

для проги нажатие Ф ничем не отличается от нажатия ентер

procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
showmessage(inttostr(key));
end;

if (ssCtrl in Shift) and (key=. ) then.

Undeclared identifier «Shift».


> Alral © (22.08.06 20:21) [27]

> Undeclared identifier «Shift».

А причем тут OnKeyPress?
В оном есть только WM_CHAR.


> Alral © (22.08.06 20:21) [27]

Видимо, в этом (key=. ) оно и есть.

Da, v etom, a kakoi simvol dolzhen bit? Naprimer dlja T?


> Alral © (22.08.06 20:43) [30]

> Da, v etom, a kakoi simvol dolzhen bit? Naprimer dlja T?

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
DprYg © ( 2006-08-22 20:55 ) [32]

if (ssCtrl in Shift) and ((Key = Ord(«T»)) then.

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
Ketmar © ( 2006-08-22 20:56 ) [33]

> [16] Галинка © (21.08.06 12:31)
это где там «бардак»? это не «бардак», это незнание основ трансляции VK в коды символов. в частности того, что Alt+ не посылает сообщения WM_CHAR. оно посылает WM_SYSCHAR. следовательно, OnKeyPress() и не обязана на это реагировать.


> DprYg © (22.08.06 20:55) [32]

> if (ssCtrl in Shift) and ((Key = Ord(«T»)) then.

Да, конечно, Ord.
Sorry.

Ketmar © (22.08.06 20:56) [33]

я уже в принципе разобралась, что не бардак. Я не разобралась пока только, как отловить, например, Ctrl+F2, ну т.е. альта/контрола с функциональными клавишами.

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
Ketmar © ( 2006-08-22 23:12 ) [36]

> [35] Галинка © (22.08.06 22:59)
RegisterHotKey() не пойдёт?

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
Ketmar © ( 2006-08-22 23:13 ) [37]

да, извиняюсь. конечно же, после alt+ водникают UP и DOWN, который потом TranslateMessage() обарбатывает. %-)

коды кнопок клавиатуры delphi. top. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-top. картинка коды кнопок клавиатуры delphi. картинка top. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :коды кнопок клавиатуры delphi. down. коды кнопок клавиатуры delphi фото. коды кнопок клавиатуры delphi-down. картинка коды кнопок клавиатуры delphi. картинка down. Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
Ketmar © ( 2006-08-22 23:14 ) [38]

Источник

Коды кнопок клавиатуры delphi

При проектировании приложения необходимо предусмотреть удобную для пользователя последовательность фокусировки элементов.

Желательно, чтобы фокус автоматически переключался с одного компонента на другой в оптимальной последовательности при нажатии пользователем клавиши Enter после окончания работы с компонентом. Следует также предоставить пользователю возможность переключать фокус с помощью клавиши Табуляции. Очевидно, что с помощью мыши пользователь также имеет возможность переключать фокус.

В процессе выполнения это свойство меняется.

Во время проектирования можно установить последовательность фокусировки с помощью Табуляции.

Для задания последовательности табуляции проще всего воспользоваться командой Edit | Tab Order и в режиме диалога задать необходимую последовательность.

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

Все действия пользователя при взаимодействии с приложени­ем сводятся к перемещению мыши, нажатию кнопок мыши и на­жатию клавиш клавиатуры. Поэтому важно понимать, что происходит при этих манипуляциях пользователя.

Обработка событий мыши

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

Щелчок мыши на компоненте и некоторые другие действия пользователя

Двойной щелчок мыши на компоненте.

Нажатие клавиши мыши над компонентом. Возмож­но распознавание нажатой кнопки и координат кур­сора мыши.

Перемещении курсора мыши над компонентом. Воз­можно распознавание нажатой кнопки и координат курсора мыши.

Отпускание ранее нажатой кнопки мыши над ком­понентом. Возможно распознавание нажатой кнопки и координат курсора мыши.

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

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

Наиболее широко используется событие OnClick. Обычно оно наступает, если пользователь щелкнул на компоненте, т.е. нажал и отпустил кнопку мыши, когда указатель мыши нахо­дился на компоненте. Но это событие происходит также и при не­которых других действиях пользователя. Оно наступает, если:

• Пользователь выбрал элемент в сетке, дереве, списке, выпада­ющем списке, нажав клавишу со стрелкой.

• Пользователь нажал клавишу пробела, когда кнопка или ин­дикатор были в фокусе.

• Пользователь нажал клавишу Enter, а активная форма имеет кнопку по умолчанию, указанную свойством Default.

• Пользователь нажал клавишу Esc, а активная форма имеет кнопку прерывания, указанную свойством Cancel.

• Пользователь нажал клавиши быстрого доступа к кнопке или индикатору. Например, если свойство Caption индикатора за­писано как ‘&Попужирный’ и символ ‘П’ подчеркнут, то нажа­тие пользователем комбинации клавиш Alt+П вызовет событие OnClick в этом индикаторе.

• Приложение установило в true свойство Checked радиокноп­ки RadioButton.

• Приложение изменило свойсто Checked индикатора Check-Box.

• Вызван метод Click элемента меню.

Для формы событие OnClick наступает, если пользователь щелкнул на пустом месте формы или на недоступном компонен­те.

Необходимо четко представлять последовательность отдельных событий, наступающих при том или ином действии пользователя. Рассмотрим эти последователь­ности.

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

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

Перемещение курсора мыши в пределах первого компонента

Множество событий OnMouseMove в первом компоненте

Перемещение курсора мыши в пределах формы

Множество событий OnMouseMove в форме

Перемещение курсора мыши в пределах второго компонента

Множество событий OnMouseMove во втором компоненте

Нажатие кнопки мыши

OnExit в первом компоненте

OnEnter во втором компоненте

OnMouseDown во втором компоненте

Отпускание кнопки мыши

OnClick во втором компоненте

OnMouseUp во втором компоненте

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

В об­работчиках событий OnMouseDown и OnMouseUp можно распо­знать, какая кнопка мыши нажата и в какой точке компонента находится в данный момент курсор мыши.

Если щелчок делается на объекте, который уже находится в этот момент в фокусе, то не происходят события OnExit и OnEnter. В этом случае при нажа­тии кнопки наступает только событие OnMouseDown, а при отпу­скании кнопки — события OnClick и OnMouseUp.

Теперь рассмотрим последовательность событий при двойном щелчке на компоненте.

Первое нажатие кнопки мыши

OnMouseDown. Возможно распознавание на­жатой кнопки и координат курсора мыши

Первое отпускание кнопки мыши

OnMouseUp. Возможно распознавание нажа­той кнопки и координат курсора мьгпГи

Второе нажатие кнопки мыши

OnMouseDown. Возможно распознавание на­жатой кнопки и координат курсора мыши

Второе отпускание кнопки мыши

OnMouseUp. Возможно распознавание нажа­той кнопки и координат курсора мыши.

Распозна­вать нажатую кнопку мыши по-прежнему можно только в собы­тиях OnMouseDown и OnMouseUp. Если же надо распознать именно двойной щелчок какой-то определенной кнопкой мыши, то можно, например, ввести некую переменную, являющуюся флагом двойного щелчка, устанавливать этот флаг в обработчике события OnDblClick, а в обработчиках событий OnMouseDown или OnMouseUp проверять этот флаг и, если он установлен, то сбрасывать его и выполнять запланированные действия.

Распознавание источника события,

нажатых кнопок и клавиш, координат курсора

Распознавание источника события

Во все обработчики событий, связанных с манипуляциями мыши (как и во все другие обработчики), передается параметр Sender типа TObject. Этот параметр содержит указатель на ком­понент, в котором произошло событие. Он не требуется, если пишется обработчик события для одного конкретного компонента. Однако часто один обработчик применяется для нескольких ком­понентов. При этом какие-то операции могут быть общими для любых источников события, а какие-то требовать специфических действий. Тогда Sender можно использовать для распознавания источника события. Правда, поскольку тип TObject не имеет ни­каких полезных для пользователя свойств и методов, то объект Sender следует рассматривать как объект одного из производных от TObject типов.

Если необходимо распознать только тип объекта, можно использовать операцию is.

так можно проверить, является ли источник события компонентом типа TListBox.

Если требуется распознать объект по имени или другому свой­ству, можно использовать операцию as.

так можно проверить, является ли этот компонент компонентом с именем Edit1.

В данном случае можно было бы просто опреде­лить, не является ли Sender объектом Edit1:

Операцию as можно также использовать, если надо приме­нить к источнику события некоторый метод.

увеличивает на 10% размер любого оконного компонента, в кото­ром произошло обрабатываемое событие.

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

Помимо параметра Sender в обработчики событий OnMouseDown и OnMouseUp передаются параметры, позволяющие распо­знать нажатую кнопку, нажатые при этом вспомогательные кла­виши, а также определить координаты курсора мыши. Заголовок обработчика события OnMouseDown или OnMouseUp может иметь, например, следующий вид:

Shift: TShiftState; X, Y: Integer);

Параметр Button определяет нажатую в этот момент кнопку мыши.

Тип TMouseButton — перечислимый тип, определяемый следующим образом:

TMouseButton = (mbLeft, mbRight, mbMiddle) ;

Например, если необходимо, чтобы обработчик реагировал на на­жатие только левой кнопки, можно написать: if (Button <> mbLeft) then exit;

Параметр Shift определяет, какие вспомога­тельные клавиши на клавиатуре нажаты в момент нажатия кнопки мыши.

Тип TShiftState — множество, определенное сле­дующим образом:

TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble) ;

Элементы этого множества соответствуют нажатию клавиш Shift (ssShift), Alt (ssAlt), Ctrl (ssCtrl), а также кнопок: левой (ssLeft), правой (ssRight), средней (ssMiddle).

Информация о на­жатых кнопках в параметрах Button и Shift имеет различный смысл.

Параметр Button соответствует кнопке, нажимаемой в данный момент, а параметр Shift содержит информацию о том, какие кнопки были нажаты, включая и те, которые были нажаты ранее.

Например, если пользователь нажмет левую кнопку мыши, а затем, не отпуская ее, нажмет правую, то после первого нажатия множество Shift будет равно [ssLeft], а после второго — [ssLeft, ssRight]. Если до этого пользователь нажал и не отпус­тил какие-то вспомогательные клавиши, то информация о них также будет присутствовать в множестве Shift.

Так как Shift является множеством, проверять наличие в нем тех или иных элементов надо операцией in.

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

Замечание. Здесь условие (Button = mbLeft) можно заменить эквивалентным ему условием

Аналогичные параметры Button и Shift передаются и в обра­ботчик события OnMouseUp. Отличие только в том, что параметр Button соответствует не нажимаемой в данный момент, а отпус­каемой кнопке. Параметр Shift передается также в обработчик события OnMouseMove, так что и в этом обработчике можно определить, какие клавиши и кнопки нажаты.

Распознавание координат курсора

Во все события, связанные с мышью, передаются также коор­динаты курсора Х и Y.

Эти параметры определяют координаты курсора в клиентской области компонента. Благодаря этому можно обеспечить различную реакцию в зависимости от того, в какой части клиентской области расположен курсор.

В событие OnMouseDown компонента (формы) можно ввести обработчик, в котором можно анализи­ровать координаты курсора, например

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

Можно распознать нажатые клавиши, вклю­чая функциональные, и кнопки мыши, но нельзя рас­познать символ нажатой клавиши

Можно распознать нажатую клавишу символа, различить символ в верхнем и нижнем реги­стре, различить символы кириллицы и латинские, но нельзя распознать функциональные клавиши и кноп­ки

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

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

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

Пусть, например, пользователь нажал клавишу Shift (перевел ввод в верхний регистр), а затем нажал клавишу симво­ла “н”. Последовательность событий для этого случая приведена в таблице.

Нажатие клавиши Shift

OnKeyDown. Возможно распознавание нажатой клавиши Shift

OnKeyDown. Возможно распознавание нажатой клавиши Shift, нажатой клави­ши “н”, но отличить верхний регистр от нижнего и латинский символ от русско­го невозможно

ОпКеу Press. Возможно распознавание символа с учетом регистра и языка, но невозможно распознавание нажатой кла­виши Shift

Отпускание клавиши “н”

OnKeyUp. Возможно распознавание на­жатой клавиши Shift, отпущенной клави­ши “н”, но отличить верхний регистр от нижнего и латинский символ от русско­го невозможно

Отпускание клавиши Shift

OnKeyUp. Возможно распознавание от­пущенной клавиши Shift

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

Куда поступают события клавиатуры?

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

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

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

Параметр Sender указывает на источник события

Параметр Shift, представляет множество элементов, отражающих нажатые в это время функциональные клавиши.

Здесь множество возможных элементов параметра Shift сокращено до ssShift (нажата клавиша Shift), ssAlt (нажата клавиша Alt) и ssCtrl (нажата клавиша Ctrl). Информация о нажатых кнопках мыши отсутствует.

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

Параметр Key определяет нажатую в момент события клавишу клавиатуры.

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

Источник

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

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