Tastatūras pasākumi kopā ar peles notikumi, ir galvenie elementi lietotāja mijiedarbībai ar jūsu programmu.
Zemāk ir informācija par trim notikumiem, kas ļauj tvert lietotāja taustiņu nospiešanas Delphi lietojumprogrammā: OnKeyDown, OnKeyUp un OnKeyPress.
Uz leju, uz augšu, nospiediet, uz leju, uz augšu, nospiediet...
Delphi lietojumprogrammas var izmantot divas metodes ievades saņemšanai no tastatūras. Ja lietotājam lietojumprogrammā ir jāievada kaut kas, vienkāršākais veids, kā saņemt šo ievadi, ir izmantot vienu no vadības ierīcēm, kas automātiski reaģē uz taustiņu nospiešanu, piemēram, Rediģēt.
Tomēr citos laikos un vispārīgākiem nolūkiem mēs varam izveidot procedūras tādā formā, lai apstrādātu trīs notikumus, kurus atpazīst formas un jebkura sastāvdaļa, kas pieņem tastatūras ievadi. Šiem notikumiem varam rakstīt notikumu apstrādātājus, lai reaģētu uz jebkuru taustiņu vai taustiņu kombināciju, kuru lietotājs varētu nospiest izpildlaikā.
Šie ir šie notikumi:
OnKeyDown - izsauc, nospiežot jebkuru tastatūras taustiņu
OnKeyUp - tiek izsaukts, kad tiek atbrīvots jebkurš tastatūras taustiņš
OnKeyPress - izsauc, kad tiek nospiests taustiņš, kas atbilst ASCII rakstzīmei
Tastatūras apstrādātāji
Visiem tastatūras notikumiem ir viens parametrs kopīgs. Atslēga parametrs ir tastatūras taustiņš, un to izmanto, lai ar atsauci pārspiestu nospiestā taustiņa vērtību. Maiņa parametrs ( OnKeyDown un OnKeyUp procedūras) norāda, vai taustiņi Shift, Alt vai Ctrl tiek apvienoti ar taustiņu.
Sūtītāja parametrs atsaucas uz vadīklu, kas tika izmantota, lai izsauktu metodi.
procedūra TForm1.FormKeyDown (Sūtītājs: TObject; var Atslēga: vārds; Shift: TShiftState);... procedūra TForm1.FormKeyUp (Sūtītājs: TObject; var Atslēga: vārds; Shift: TShiftState);... procedūra TForm1.FormKeyPress (Sūtītājs: TObject; var Atslēga: Char);
Lai reaģētu, lietotājam nospiežot īsinājumtaustiņus vai paātrinātāja taustiņus, piemēram, tos, kas nodrošināti ar izvēlnes komandām, nav nepieciešams rakstīt notikumu apstrādātājus.
Kas ir fokuss?
Fokuss ir spēja saņemt lietotāja informāciju caur pele vai tastatūru. Tastatūras notikumu var saņemt tikai objekts, kam ir fokuss. Turklāt tikai viena sastāvdaļa vienā formā jebkurā laikā var būt aktīva vai koncentrēties darbojošā lietojumprogrammā.
Daži komponenti, piemēram, TImage, TPaintBox, TPanel un TLabel nevar saņemt fokusu. Kopumā komponenti, kas iegūti no TGraphicControl nespēj uztvert fokusu. Turklāt komponenti, kas darbības laikā ir neredzami (TTimer) nevar saņemt fokusu.
OnKeyDown, OnKeyUp
OnKeyDown un OnKeyUp notikumi nodrošina zemāko tastatūras reakcijas līmeni. Gan OnKeyDown un OnKeyUp apstrādātāji var atbildēt uz visiem tastatūras taustiņiem, ieskaitot funkciju taustiņus un taustiņus, kas apvienoti ar Maiņa, Alt, un Ctrl taustiņi.
Tastatūras pasākumi nav savstarpēji izslēdzoši. Kad lietotājs nospiež taustiņu, abi OnKeyDown un OnKeyPress notikumi tiek ģenerēti, un, kad lietotājs atbrīvo atslēgu, OnKeyUp notikums tiek ģenerēts. Kad lietotājs nospiež vienu no taustiņiem, kas OnKeyPress neatklāj, tikai OnKeyDown notiek notikums, kam seko OnKeyUp notikums.
Turot nospiestu taustiņu, OnKeyUp notikums notiek pēc visiem OnKeyDown un OnKeyPress notikumi ir notikuši.
OnKeyPress
OnKeyPress atgriež atšķirīgu ASCII rakstzīmi “g” un “G”, bet OnKeyDown un OnKeyUp neatšķiriet lielos un mazos alfa taustiņus.
Taustiņu un pārslēgšanas parametri
Kopš Atslēga parametrs tiek nodots ar atsauci, notikumu apstrādātājs var mainīties Atslēga lai lietojumprogramma redzētu citu atslēgu kā iesaistītu notikumā. Tas ir veids, kā ierobežot rakstzīmju veidus, ko lietotājs var ievadīt, piemēram, lai neļautu lietotājiem rakstīt alfa taustiņus.
ja Atslēga iekšā ['a'.. 'z'] + ['A'.. 'Z'] tad Taustiņš: = # 0
Iepriekš minētais paziņojums pārbauda, vai Atslēga parametrs ir savienots divās kopās: mazie burti (t.i. a cauri z) un lielie burti (A-Z). Ja tā, paziņojums burta vērtību nullei piešķir līdz Atslēga lai novērstu jebkādu ievadi Rediģēt komponents, piemēram, kad tas saņem modificēto atslēgu.
Ciparu taustiņiem, kas nav burtciparu taustiņi, WinAPI virtuālo atslēgu kodi var izmantot nospiestā taustiņa noteikšanai. Windows nosaka īpašas konstantes katram taustiņam, kuru lietotājs var nospiest. Piemēram, VK_RIGHT ir labās bultiņas virtuālās atslēgas kods.
Lai iegūtu atslēgu stāvokli dažos īpašos taustiņos, piemēram TAB vai PageUp, mēs varam izmantot GetKeyState Windows API zvans. Taustiņa statuss norāda, vai taustiņš ir uz augšu, uz leju vai pārslēdzams (ieslēgts vai izslēgts - mainās katru reizi, kad tiek nospiests taustiņš).
ja HiWord (GetKeyState (vk_PageUp)) <> 0 tad
ShowMessage ('PageUp - DOWN')
cits
ShowMessage ('PageUp - UP');
Iekš OnKeyDown un OnKeyUp notikumi, Atslēga ir neparakstīta Word vērtība, kas apzīmē Windows virtuālo atslēgu. Lai iegūtu rakstzīmes vērtību no Atslēga, mēs izmantojam Chr funkcija. Iekš OnKeyPress notikums, Atslēga ir Char vērtība, kas apzīmē ASCII rakstzīmi.
Gan OnKeyDown un OnKeyUp notikumos tiek izmantots Shift parametrs, tips TShiftState, iestatīti karodziņi, lai noteiktu taustiņu Alt, Ctrl un Shift stāvokli, kad tiek nospiests taustiņš.
Piemēram, nospiežot Ctrl + A, tiek ģenerēti šādi galvenie notikumi:
KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)
Tastatūras notikumu novirzīšana uz formu
Lai ieslodzītu taustiņsitienus formas līmenī, nevis nodotu tos formas komponentiem, iestatiet veidlapu KeyPreview īpašums patiesībai (izmantojot Objektu inspektors). Komponents joprojām redz notikumu, taču veidlapai ir iespēja to vispirms apstrādāt - atļaut vai neļaut, piemēram, nospiest dažus taustiņus.
Pieņemsim, ka jums ir vairāki rediģēšanas komponenti veidlapā un Forma. OnKeyPress procedūra izskatās šādi:
procedūraTForm1.FormKeyPress (Sūtītājs: TObject; var Atslēga: Char); sāktja Atslēga iekšā ['0'..'9'] tad Taustiņš: = # 0. beigas;
Ja kādam no rediģēšanas komponentiem ir Fokuss, un KeyPreview formas īpašums ir nepatiess, šis kods netiks izpildīts. Citiem vārdiem sakot, ja lietotājs nospiež taustiņu 5 taustiņu, 5 raksturs parādīsies fokusētajā rediģēšanas komponentā.
Tomēr, ja KeyPreview ir iestatīts uz Patiess, pēc tam veidlapas OnKeyPress notikums tiek izpildīts, pirms komponents Rediģēt redz nospiesto taustiņu. Atkal, ja lietotājs ir nospiedis 5 taustiņu, tad tas taustiņam piešķir nulles rakstzīmes vērtību, lai novērstu ciparu ievadi komponentā Rediģēt.