Разумевање и обрада догађаја са тастатуром у Делфима

Догађаји на тастатури, заједно са догађаји са мишем, су основни елементи интеракције корисника са вашим програмом.

Испод су информације о три догађаја који омогућавају снимање корисничких притиска у Делпхи апликацији: ОнКеиДовн, ОнКеиУп и ОнКеиПресс.

Доље, горе, притисните, надоле, горе, притисните...

Делпхи апликације могу користити две методе за пријем улаза са тастатуре. Ако корисник мора да унесе нешто у апликацију, најлакши начин да прими тај унос је употреба једне од контрола која аутоматски реагује на притиске тастера, као што је Уреди.

У другим временима и за опћенитије сврхе, међутим, можемо креирати процедуре у облику који обрађује три догађаја препозната по облицима и било коју компоненту која прихвата унос тастатуре. Можемо написати обрађиваче догађаја за ове догађаје да одговоре на било који тастер или комбинацију тастера које корисник може притиснути током извођења.

Ево тих догађаја:

ОнКеиДовн - позива се када се притисне било који тастер на тастатури
ОнКеиУп - позива се када се отпусти било који тастер на тастатури

instagram viewer

ОнКеиПресс - позива се када се притисне тастер који одговара АСЦИИ знаку

Руковаоци тастатуре

Сви догађаји на тастатури имају један параметар заједничко. Тхе Кључ параметар је типка на тастатури и користи се за преношење вриједности притиснуте типке. Тхе Смена параметар (у ОнКеиДовн и ОнКеиУп процедуре) показује да ли су тастери Схифт, Алт или Цтрл комбиновани са притиском на тастер.

Тхе Пошиљалац параметар односи се на контролу која је кориштена за позивање методе.

процедура ТФорм1.ФормКеиДовн (Пошиљалац: ТОбјецт; вар Кључ: Реч; Схифт: ТСхифтСтате);... процедура ТФорм1.ФормКеиУп (Пошиљалац: ТОбјецт; вар Кључ: Реч; Схифт: ТСхифтСтате);... процедура ТФорм1.ФормКеиПресс (Пошиљалац: ТОбјецт; вар Кључ: Цхар); 

Да бисте одговорили када корисник притисне пречице или тастере за убрзање, попут оних које добијате помоћу команди менија, не захтева писање алата за обраду догађаја.

Шта је фокус?

Фокус је могућност примања корисничког уноса путем миш или тастатура. Само објекат који има фокус може примити догађај на тастатури. Такође, само једна компонента по обрасцу може бити активна или се фокусирати у покренутој апликацији у било којем тренутку.

Неке компоненте, као што су ТИмаге, ТПаинтБок, ТПанел и ТЛабел не може добити фокус. Генерално, од компоненти које потичу ТГрапхицЦонтрол нису у стању да приме фокус. Поред тога, компоненте које су невидљиве у време извођења (ТТимер) не може добити фокус.

ОнКеиДовн, ОнКеиУп

Тхе ОнКеиДовн и ОнКеиУп догађаји пружају најнижи ниво одзива тастатуре. И једно и друго ОнКеиДовн и ОнКеиУп руковаоци могу да одговоре на све тастатуре, укључујући функцијске тастере и тастере комбиноване са Смена, Алт, и Цтрл тастери.

Догађаји на тастатури нису међусобно искључиви. Када корисник притисне тастер, оба ОнКеиДовн и ОнКеиПресс догађаји се генеришу и када корисник пусти кључ, ОнКеиУп догађај је генерисан. Када корисник притисне један од тастера који ОнКеиПресс не открива, већ само ОнКеиДовн догађај се догађа, а затим следи ОнКеиУп догађај.

Ако држите тастер, тастер ОнКеиУп догађај се дешава након свега ОнКеиДовн и ОнКеиПресс догађаји су се догодили.

ОнКеиПресс

ОнКеиПресс враћа другачији АСЦИИ знак за 'г' и 'Г', али ОнКеиДовн и ОнКеиУп не правите разлику између великих и малих слова алфа.

Параметри кључа и померања

Од тада Кључ параметар се просљеђује референцом, а обрађивач догађаја се може промијенити Кључ тако да апликација види другачији кључ као укључен у догађај. На овај је начин ограничење врста знакова које корисник може унијети, попут спречавања корисника да куцају алфа кључеве.

ако Кључ ин ['а'.. 'з'] + ['А'.. 'З'] онда Кључ: = # 0 

Горња изјава провјерава да ли Кључ параметар је у савезу два скупа: малим словима (тј. а кроз з) и велика слова (А-З). Ако је тако, изјава додјељује вриједност знака нула Кључ да се спречи било какав улаз у улаз Уредити компонента, на пример, када прими модификовани кључ.

За не-алфанумеричке тастере, ВинАПИ виртуални кодови кључева може се користити за одређивање притиснутог тастера. Виндовс дефинише посебне константе за сваки тастер који корисник може притиснути. На пример, ВК_РИГХТ је код виртуалног кључа за типку са стрелицом десно.

Да бисте добили стање кључева неких специјалних тастера ТАБ или Страна горе, можемо да користимо ГетКеиСтате Виндовс АПИ позив. Статус тастера одређује да ли је тастер горе, доле или преклопљен (укључен или искључен - наизменично сваки пут када се тастер притисне).

ако ХиВорд (ГетКеиСтате (вк_ПагеУп)) <> 0 онда
СховМессаге ('ПагеУп - ДОЉЕ')
друго
СховМессаге ('ПагеУп - УП'); 

У ОнКеиДовн и ОнКеиУп догађаји, Кључ је непотписана вредност за Ворд која представља Виндовс виртуелни кључ. Да бисте добили вредност знака од Кључ, користимо Цхр функција. У ОнКеиПресс догађај, Кључ је Цхар вредност која представља АСЦИИ знак.

И једно и друго ОнКеиДовн и ОнКеиУп догађаји користе тип Схифт параметар ТСхифтСтате, поставите заставице за одређивање стања тастера Алт, Цтрл и Схифт када се притисне тастер.

На пример, када притиснете Цтрл + А, генеришу се следећи кључни догађаји:

 КеиДовн (Цтрл) // ссЦтрл
КеиДовн (Цтрл + А) // ссЦтрл + 'А'КеиПресс (А) КеиУп (Цтрл + А)

Преусмеравање догађаја са тастатуре на образац

Да бисте заробили притиске тастера на нивоу форме, уместо да их проследите компонентама форме, подесите обрасце обрасца КеиПревиев својство Труе (коришћењем Инспектор објекта). Компонента и даље види догађај, али образац има прилику да се прво позабави тим - на пример, да дозволи или онемогући притискање неких тастера.

Претпоставимо да имате неколико компонената за уређивање на обрасцу и Образац. ОнКеиПресс поступак изгледа као:

процедураТФорм1.ФормКеиПресс (Пошиљалац: ТОбјецт; вар Кључ: Цхар); започетиако Кључ ин ['0'..'9'] онда Кључ: = # 0. крај; 

Ако једна од компоненти за уређивање има Фокус, и тхе КеиПревиев својство форме је лажно, овај се код неће извршити. Другим речима, ако корисник притисне 5 кључ, тхе 5 у фокусираној компоненти Едит ће се појавити знак.

Међутим, ако КеиПревиев постављено је на Труе, тада је образац ОнКеиПресс догађај се извршава пре него што компонента Уреди види кључ који је притиснут. Опет, ако је корисник притиснуо тастер 5 тастер, онда тастеру додељује вредност карактера нула да спречи нумерички унос у компоненту Уреди.