Metoda Key Press
Przejmowanie
kontroli nad klawiszem za pomocą metody Key Press, to pierwsze i
podstawowe działanie programistyczne w tej materii. Nie korzystamy
tu ze skomplikowanych rozwiązań, tylko wykorzystujemy możliwości
Inspektora Obiektów. W jego prawej zakładce (Events) znajduje się
zdarzenie nazwane OnKeyPress. Jak sama nazwa wskazuje, reaguje ono na
naciśnięcie klawisza. Kiedy ktoś naciśnie dowolny klawisz,
program wygeneruje zdarzenie OnKeyPress, które z kolei wykona
przypisany do niego kod. Cały przedstawiony przez nas kod, to nic
innego, jak zbiór oddzielnych instrukcji warunkowych sprawdzających,
czy nie wystąpił dany warunek. Tym warunkiem jest oczywiście
naciśnięcie konkretnego klawisza:
if
key= #48 then
//jeżeli naciśnięto klawisz '0',
wtedy...
begin
Opcja_niedostepna;
end;
Aby móc w ten sposób korzystać z dobrodziejstw Delphi, musimy w Inspektorze Obiektów zmienić właściwość KeyPreview, z false na true. Polecenie to nakaże naszemu programowi przeglądanie klawiatury, czy czasem nie został naciśnięty jakiś klawisz.
W
powyższym przykładzie, po spełnieniu warunku, czyli po naciśnięciu
klawisza zero, zostaje uruchomiona procedura Opcja_niedostepna. Jest
ona wykonawcą wszystkich pozostałych warunków, nie tylko tej
metody, ale także pozostałych. Analizując ową procedurę widzimy,
że zawiera ona tylko jedno polecenie, ma wyświetlić komunikat
ShowMessage z napisem „Opcja niedostępna”. Procedurę tę
utworzyliśmy celowo, aby ukazać, że w bloku begin...end
możemy zawrzeć wszystko, każdy sensowny kod do wykonania.
Komunikat ten przyda się nam szczególnie wtedy, kiedy będziemy
chcieli zastosować przechwyt większej części klawiszy, lecz nie
dla wszystkich będziemy mieli jeszcze zastosowanie. Możemy wtedy
umieścić taki tymczasowy komunikat, że ta opcja na razie jest
nieaktywna.
Kody klawiszy
W
jednej z zabaw wspominaliśmy już, że każdy klawisz ma swój
własny identyfikator. Kiedy budowaliśmy ograniczenia dla klawiszy,
w polu do wpisywania odpowiedzi (zdarzenie Edit.KeyPress), używaliśmy
na przykład klawiszy Backpace (#8) i minusa (#45). Każdy z klawiszy
posiada taki kod. Możemy uznać, iż jest to ta informacja płynąca
z klawiatury, który klawisz został naciśnięty. Na tej podstawie
budujemy właśnie warunek sprawdzający: „Jeżeli (if)
został naciśnięty klawisz „0” (key:= #48), wtedy (then)
wykonaj instrukcje zawarte w bloku begin...end”.
Ot, i cała filozofia...
Eksperymentując
z kodami poszczególnych klawiszy, zauważymy, że metoda Key Press
nie zawsze działa. Pomimo wpisania właściwego kodu klawisza, nic
się nie dzieje. Wynika to głównie ze „słabości” tej metody.
Niektóre klawisze, jak na przykład F2 (pomoc), czy Esc (wyjdź) są
domyślnie zarezerwowane dla pewnych ogólnie przyjętych działań i
nie dają się przechwycić taką prostą metodą. Analizując
tabelę, widzimy jednak, że można to uczynić, stosując bardziej
zaawansowane rozwiązania.
Metoda
Key Press wiedzie prym w przechwytywaniu klawiszy standardowych,
powszechnie używanych, czyli przede wszystkim klawiszy cyfr i liter,
oraz ich kombinacji z klawiszem rozszerzonym Shift. Jako sugestię
tylko wskażemy na zależność, że naciśnięcie klawisza z literką
„a” przy włączonym przycisku Caps Lock da nam dużą literę
„A”. Tę samą dużą literę da w normalnych warunkach
kombinacja klawiszy Shift i „a” (Shift+a). Dla małej literki „a”
(czyli, gdy Caps Lock jest wyłączony) kod klawisza będzie wynosił
#97. W przypadku naciśnięcia tego samego klawisza przy włączonym
Caps Lock, kod będzie wynosił #65, czyli będzie taki sam, jak dla
kombinacji Shift+a.
Czas
zapoznać się z kodem tej metody:
unit
Unit1;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 =
class(TForm)
procedure
Opcja_niedostepna;
procedure
FormKeyPress(Sender: TObject; var
Key: Char);
private
{
Private declarations }
public
{
Public declarations }
end;
var
Form1:
TForm1;
implementation
{$R
*.dfm}
// PROCEDURA OPCJA
NIEDOSTEPNA //
procedure
TForm1.Opcja_niedostepna;
begin
ShowMessage('Opcja
niedostępna');
end;
///////////////// przechwyt klawiszy ////////////////////
procedure
TForm1.FormKeyPress(Sender: TObject; var
Key: Char);
begin
if
key= #48 then
//jezeli nacisnieto klawisz 0, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #49 then
//jezeli nacisnieto klawisz 1, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #50 then
//jezeli nacisnieto klawisz 2, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #51 then
//jezeli nacisnieto klawisz 3, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #52 then
//jezeli nacisnieto klawisz 4, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #53 then
//jezeli nacisnieto klawisz 5,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #54 then
//jezeli nacisnieto klawisz 6, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #55 then
//jezeli nacisnieto klawisz 7, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #56 then
//jezeli nacisnieto klawisz 8, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #57 then
//jezeli nacisnieto klawisz 9, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #97 then
//jezeli nacisnieto klawisz a, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #98 then
//jezeli nacisnieto klawisz b, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #99 then
//jezeli nacisnieto klawisz c,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #100 then
//jezeli nacisnieto klawisz d,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #101 then
//jezeli nacisnieto klawisz e, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #102 then
//jezeli nacisnieto klawisz f, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #103 then
//jezeli nacisnieto klawisz g,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #104 then
//jezeli nacisnieto klawisz h, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #105
then
//jezeli nacisnieto
klawisz i, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #106 then
//jezeli nacisnieto klawisz j, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #107 then
//jezeli nacisnieto klawisz k,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #108 then
//jezeli nacisnieto klawisz l,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #109 then
//jezeli nacisnieto klawisz m,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #110 then
//jezeli nacisnieto klawisz n, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #111 then
//jezeli nacisnieto klawisz o,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #112 then
//jezeli nacisnieto klawisz p, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #113 then
//jezeli nacisnieto klawisz q, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #114 then
//jezeli nacisnieto klawisz r,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #115 then
//jezeli nacisnieto klawisz s, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #116 then
//jezeli nacisnieto klawisz t, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #117 then
//jezeli nacisnieto klawisz u, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #118 then
//jezeli nacisnieto klawisz v,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #119 then
//jezeli nacisnieto klawisz w,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #120 then
//jezeli nacisnieto klawisz x,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #121 then
//jezeli nacisnieto klawisz y, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #122 then
//jezeli nacisnieto klawisz z,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #96 then
//jezeli nacisnieto klawisz `~, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #61 then
//jezeli nacisnieto klawisz =, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #45 then
//jezeli nacisnieto klawisz -(minus),
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #91 then
//jezeli nacisnieto klawisz [,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #93 then
//jezeli nacisnieto klawisz ],
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #59 then
//jezeli nacisnieto klawisz ;,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #39 then
//jezeli nacisnieto klawisz
'(apostrof), wtedy...
begin
Opcja_niedostepna;
end;
if
key= #44 then
//jezeli nacisnieto klawisz
,(przecinek), wtedy...
begin
Opcja_niedostepna;
end;
if
key= #46 then
//jezeli nacisnieto klawisz
.(kropka) , wtedy...
begin
Opcja_niedostepna;
end;
if
key= #47 then
//jezeli nacisnieto klawisz /?
, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #92 then
//jezeli nacisnieto klawisz \|
, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #13 then
//jezeli nacisnieto klawisz
Enter, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #8 then
//jezeli nacisnieto klawisz Backspace,
wtedy...
begin
Opcja_niedostepna;
end;
/////////////////// Shift +
klawisz ////////////////////
if
key= #33 then
//jezeli nacisnieto klawisz Shift+1,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #64 then
//jezeli nacisnieto klawisz
Shift+2, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #35 then
//jezeli nacisniesz klawisz Shift+ 3,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #36 then
//jezeli nacisnieto klawisz Shift+ 4,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #37 then
//jezeli nacisnieto klawisz Shift+
5, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #94 then
//jezeli nacisnieto klawisz
Shift+6, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #38 then
//jezeli nacisnieto klawisz Shift+7,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #42 then
//jezeli nacisnieto klawisz Shift+8,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #40 then
//jezeli nacisnieto klawisz Shift+9,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #41 then
//jezeli nacisnieto klawisz Shift+0,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #95 then
//jezeli nacisnieto klawisz Shift+
-, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #43 then
//jezeli nacisnieto klawisz Shift+ =,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #65 then
//jezeli nacisnieto klawisz Shift+ a
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #66 then
//jezeli nacisnieto klawisz Shift+ b,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #67 then
//jezeli nacisnieto klawisz
Shift+c, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #68 then
//jezeli nacisnieto klawisz
Shift+d, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #69 then
//jezeli nacisnieto klawisz Shift+e,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #70 then
//jezeli nacisnieto klawisz
Shift+f, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #71 then
//jezeli nacisnieto klawisz Shift+g,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #72 then
//jezeli nacisnieto klawisz
Shift+h, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #73 then
//jezeli nacisnieto klawisz
Shift+i, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #74 then
//jezeli nacisnieto klawisz Shift+j,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #75 then
//jezeli nacisnieto klawisz Shift+k,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #76 then
//jezeli nacisnieto klawisz Shift+l,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #77 then
//jezeli nacisnieto klawisz Shift+m,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #78 then
//jezeli nacisnieto klawisz Shift+n,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #79 then
//jezeli nacisnieto klawisz Shift+o,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #80 then
//jezeli nacisnieto klawisz Shift+p,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #81 then
//jezeli
nacisnieto klawisz Shift+q, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #82 then
//jezeli nacisnieto klawisz Shift+r,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #83 then
//jezeli nacisnieto klawisz
Shift+s, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #84 then
//jezeli nacisnieto klawisz Shift+t,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #85 then
//jezeli nacisnieto klawisz
Shift+u, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #86 then
//jezeli nacisnieto klawisz Shift+v,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #87 then
//jezeli nacisnieto klawisz Shift+w,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #88 then
//jezeli nacisnieto klawisz Shift+x,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #89 then
//jezeli nacisnieto klawisz Shift+y,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #90 then
//jezeli nacisnieto klawisz Shift+z,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #60 then
//jezeli nacisnieto klawisz Shift+
<, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #62 then
//jezeli nacisnieto klawisz Shift+ >
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #63 then
//jezeli nacisnieto klawisz Shift+
/, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #124 then
//jezeli nacisnieto klawisz Shift+ \,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #123 then
//jezeli nacisnieto klawisz Shift+
[, wtedy...
begin
Opcja_niedostepna;
end;
if
key= #125 then
//jezeli nacisnieto klawisz Shift+
], wtedy...
begin
Opcja_niedostepna;
end;
if
key= #58 then
//jezeli nacisnieto klawisz Shift+ ;,
wtedy...
begin
Opcja_niedostepna;
end;
if
key= #34 then
//jezeli nacisnieto klawisz Shift+
'(apostrof), wtedy...
begin
Opcja_niedostepna;
end;
/////////////// ctrl +
klawisz /////////////////
if
key= #3 then
//jezeli nacisnieto klawisz Ctrl+Pause, wtedy...
begin
Opcja_niedostepna;
end;
end;
end.
Artykuł pochodzi z mojej książki pt. "Delphi w przykładach dla początkujących". Zapraszam na Stronę książki.
Ciekawe artykuły:
- Zabawy matematyczne w Delphi
- Niezwykłe opowieści o niezwykłych ludziach
- Przeżycia na pograniczu śmierci
- Zabawy rozwijające pamięć w Delphi
- AntyNoble - śmieszne badania naukowe
Zapoznaj się z innymi artykułami. Przejdź do zakładki Spis artykułów.
Brak komentarzy:
Prześlij komentarz