Strony

wtorek, 14 kwietnia 2015

Przechwyt klawiatury w Delphi - Metoda Key Press

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.



                           < Wstecz    2/5    Dalej >

Artykuł pochodzi z mojej książki pt. "Delphi w przykładach dla początkujących". Zapraszam na Stronę książki.

poradnik programowania Delphi




Brak komentarzy:

Prześlij komentarz