Tastaturbegivenheder sammen med mus begivenheder, er de primære elementer i en brugers interaktion med dit program.
Nedenfor er information om tre begivenheder, der giver dig mulighed for at fange en brugers tastetryk i en Delphi-applikation: OnKeyDown, OnKeyUp og OnKeyPress.
Ned, Op, Tryk, Ned, Op, Tryk...
Delphi-applikationer kan bruge to metoder til at modtage input fra tastaturet. Hvis en bruger skal indtaste noget i et program, er den nemmeste måde at modtage denne input ved at bruge en af de kontroller, der automatisk reagerer på tastetryk, f.eks. Rediger.
På andre tidspunkter og til mere generelle formål kan vi imidlertid oprette procedurer i en form, der håndterer tre begivenheder, der genkendes af formularer og af enhver komponent, der accepterer tastaturinput. Vi kan skrive begivenhedshåndterere til disse begivenheder for at svare på en hvilken som helst tast eller tastekombination, som brugeren muligvis trykker på under kørslen.
Her er disse begivenheder:
OnKeyDown - kaldes, når der trykkes på en vilkårlig tast på tastaturet
OnKeyUp - kaldes, når en tast på tastaturet frigøres
OnKeyPress - kaldes, når der trykkes på en tast, der svarer til et ASCII-tegn
Tastaturbehandlere
Alle tastaturbegivenheder har en parameter til fælles. Det Nøgle parameter er nøglen på tastaturet og bruges til at passere ved henvisning til værdien af den trykte tast. Det Flytte parameter (i OnKeyDown og OnKeyUp procedurer) angiver, om Shift-, Alt- eller Ctrl-tasterne er kombineret med tastetrykket.
Det Afsenderparameter refererer til den kontrol, der blev brugt til at kalde metoden.
procedure TForm1.FormKeyDown (Afsender: TObject; Var Nøgle: Word; Skift: TShiftState);... procedure TForm1.FormKeyUp (Afsender: TObject; Var Nøgle: Word; Skift: TShiftState);... procedure TForm1.FormKeyPress (Afsender: TObject; Var Nøgle: Char);
At svare, når brugeren trykker på genvejs- eller acceleratortaster, såsom dem, der er forsynet med menukommandoer, kræver ikke at man skriver hændelseshændere.
Hvad er fokus?
Fokus er muligheden for at modtage brugerinput via mus eller tastatur. Kun det objekt, der har fokus, kan modtage en tastaturhændelse. Desuden kan kun en komponent pr. Form være aktiv eller have fokus i en kørende applikation til enhver tid.
Nogle komponenter, f.eks TImage, TPaintBox, TPanel og TLabel kan ikke modtage fokus. Generelt er komponenter afledt af TGraphicControl kan ikke modtage fokus. Derudover er komponenter, der er usynlige på kørselstidspunktet (TTimer) kan ikke modtage fokus.
OnKeyDown, OnKeyUp
Det OnKeyDown og OnKeyUp begivenheder giver det laveste niveau for tastaturrespons. Begge OnKeyDown og OnKeyUp håndterere kan svare på alle tastaturtaster, herunder funktionstaster og taster kombineret med Flytte, alt, og Ctrl nøgler.
Tastaturbegivenhederne er ikke gensidigt eksklusive. Når brugeren trykker på en tast, skal begge OnKeyDown og OnKeyPress begivenheder genereres, og når brugeren frigiver nøglen, OnKeyUp begivenhed genereres. Når brugeren trykker på en af tasterne der OnKeyPress registrerer ikke, kun OnKeyDown begivenhed opstår efterfulgt af OnKeyUp begivenhed.
Hvis du holder en nøgle nede, skal OnKeyUp begivenheden finder sted efter alt OnKeyDown og OnKeyPress begivenheder har fundet sted.
OnKeyPress
OnKeyPress returnerer et andet ASCII-tegn for 'g' og 'G', men OnKeyDown og OnKeyUp skeln ikke mellem store og små alfataster.
Nøgle- og skiftparametre
Siden Nøgle parameter sendes som reference, begivenhedshåndtereren kan ændre Nøgle så applikationen ser en anden nøgle som at være involveret i begivenheden. Dette er en måde at begrænse de typer tegn, som brugeren kan indtaste, som at forhindre brugere i at skrive alfabetaster.
hvis Nøgle i ['a'.. 'z'] + ['A'.. 'Z'] derefter Nøgle: = # 0
Ovenstående erklæring kontrollerer, om Nøgle parameter er i forening af to sæt: små bogstaver (dvs. -en igennem z) og store bogstaver (A-Z). I så fald tildeler sætningen tegnværdien nul til Nøgle for at forhindre input i Redigere for eksempel når den modtager den ændrede nøgle.
For ikke-alfanumeriske nøgler, WinAPI virtuelle nøglekoder kan bruges til at bestemme den trykte tast. Windows definerer specielle konstanter for hver tast, som brugeren kan trykke på. For eksempel, VK_RIGHT er den virtuelle nøglekode til højrepilnøgle.
For at få nøgletilstanden for nogle specielle nøgler som TAB eller Side op, kan vi bruge GetKeyState Windows API-opkald. Tastestatusen angiver, om tasten er op, ned eller slået (til eller fra - skifter hver gang der trykkes på tasten).
hvis HiWord (GetKeyState (vk_PageUp)) <> 0 derefter
ShowMessage ('PageUp - DOWN')
andet
ShowMessage ('PageUp - UP');
I OnKeyDown og OnKeyUp begivenheder, Nøgle er en usigneret Word-værdi, der repræsenterer en virtuel Windows-nøgle. For at få karakterværdien fra Nøgle, vi bruger Chr fungere. I OnKeyPress begivenhed, Nøgle er en char værdi, der repræsenterer et ASCII-tegn.
Begge OnKeyDown og OnKeyUp begivenheder bruger Shift-parameteren af typen TShiftState, et sæt flag for at bestemme tilstanden til Alt, Ctrl og Shift, når der trykkes på en tast.
Når du f.eks. Trykker på Ctrl + A, genereres følgende nøglehændelser:
KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)
Omdirigerer tastaturbegivenheder til formularen
For at fælde tastetryk på formularniveau i stedet for at overføre dem til formularens komponenter, skal du indstille formularens KeyPreview ejendom til True (ved hjælp af Objektinspektør). Komponenten ser stadig begivenheden, men formen har en mulighed for at håndtere den først - for eksempel at tillade eller forhindre, at nogle taster trykkes ned.
Antag, at du har flere Rediger komponenter på en formular og Form. OnKeyPress procedure ser ud som:
procedureTForm1.FormKeyPress (Afsender: TObject; Var Nøgle: Char); begyndehvis Nøgle i ['0'..'9'] derefter Nøgle: = # 0. ende;
Hvis en af Rediger-komponenterne har Fokus, og KeyPreview egenskaben til en formular er falsk, denne kode kører ikke. Med andre ord, hvis brugeren trykker på 5 nøgle, 5 tegn vises i den fokuserede Rediger-komponent.
Men hvis KeyPreview er indstillet til sandt, så er formularen OnKeyPress begivenhed udføres, inden Edit-komponenten ser den nøgle, der trykkes på. Igen, hvis brugeren har trykket på 5 -tasten, tildeles den derefter tegnværdien af nul til tasten for at forhindre numerisk input i redigeringskomponenten.