Zrozumienie i przetwarzanie zdarzeń klawiatury w Delphi

click fraud protection

Zdarzenia z klawiatury wraz z zdarzenia myszy, są podstawowymi elementami interakcji użytkownika z Twoim programem.

Poniżej znajdują się informacje o trzech zdarzeniach, które pozwalają uchwycić naciśnięcia klawiszy użytkownika w aplikacji Delphi: OnKeyDown, OnKeyUp i OnKeyPress.

W dół, w górę, naciśnij, w dół, w górę, naciśnij...

Aplikacje Delphi mogą korzystać z dwóch metod odbierania danych z klawiatury. Jeśli użytkownik musi wpisać coś w aplikacji, najprostszym sposobem na otrzymanie tego wejścia jest użycie jednego z elementów sterujących, które automatycznie reagują na naciśnięcia klawiszy, takich jak Edycja.

W innych przypadkach i dla bardziej ogólnych celów możemy jednak utworzyć procedury w formie, która obsługuje trzy zdarzenia rozpoznawane przez formularze i dowolny komponent, który akceptuje wprowadzanie z klawiatury. Możemy napisać procedury obsługi zdarzeń dla tych zdarzeń, aby reagowały na dowolny klawisz lub kombinację klawiszy, które użytkownik może nacisnąć w czasie wykonywania.

instagram viewer

Oto te wydarzenia:

OnKeyDown - wywoływany po naciśnięciu dowolnego klawisza na klawiaturze
OnKeyUp - wywoływane po zwolnieniu dowolnego klawisza na klawiaturze
OnKeyPress - wywoływany po naciśnięciu klawisza odpowiadającego znakowi ASCII

Obsługa klawiatury

Wszystkie zdarzenia na klawiaturze mają jedno parametr wspólnie. The Klucz parametr jest klawiszem na klawiaturze i służy do przekazywania przez odniesienie do wartości naciśniętego klawisza. The Zmiana parametr (w OnKeyDown i OnKeyUp procedur) wskazuje, czy klawisze Shift, Alt lub Ctrl są połączone z naciśnięciem klawisza.

The Parametr nadawcy odwołuje się do formantu użytego do wywołania metody.

procedura TForm1.FormKeyDown (Sender: TObject; var Klucz: Słowo; Shift: TShiftState);... procedura TForm1.FormKeyUp (Sender: TObject; var Klucz: Słowo; Shift: TShiftState);... procedura TForm1.FormKeyPress (Sender: TObject; var Klucz: Char); 

Odpowiadanie, gdy użytkownik naciśnie klawisze skrótu lub skrótu, takie jak te dostarczane z poleceniami menu, nie wymaga pisania procedur obsługi zdarzeń.

Co to jest fokus?

Nacisk kładziony jest na możliwość otrzymywania informacji od użytkowników za pośrednictwem mysz lub klawiatura. Tylko obiekt, na którym jest ustawiony fokus, może otrzymać zdarzenie klawiatury. Ponadto tylko jeden składnik na formularz może być aktywny lub mieć fokus w działającej aplikacji w danym momencie.

Niektóre elementy, takie jak TIMage, TPaintBox, TPanel i TLabel nie można ustawić ostrości. Zasadniczo składniki pochodzące z TGraphicControl nie są w stanie skupić się. Ponadto komponenty, które są niewidoczne w czasie wykonywania (TTimer) nie można ustawić ostrości.

OnKeyDown, OnKeyUp

The OnKeyDown i OnKeyUp zdarzenia zapewniają najniższy poziom reakcji klawiatury. Obie OnKeyDown i OnKeyUp programy obsługi mogą reagować na wszystkie klawisze klawiatury, w tym klawisze funkcyjne i klawisze połączone z Zmiana, Alt, i Ctrl Klucze.

Zdarzenia na klawiaturze nie wykluczają się wzajemnie. Gdy użytkownik naciśnie klawisz, oba OnKeyDown i OnKeyPress zdarzenia są generowane, a gdy użytkownik zwolni klucz, OnKeyUp zdarzenie jest generowane. Gdy użytkownik naciśnie jeden z klawiszy, że OnKeyPress nie wykrywa, tylko OnKeyDown następuje zdarzenie, po którym następuje OnKeyUp zdarzenie.

Jeśli przytrzymasz klawisz, OnKeyUp zdarzenie ma miejsce po wszystkim OnKeyDown i OnKeyPress wydarzenia miały miejsce.

OnKeyPress

OnKeyPress zwraca inny znak ASCII dla „g” i „G”, ale OnKeyDown i OnKeyUp nie wprowadzaj rozróżnienia na wielkie i małe litery alfabetu.

Klucz i parametry zmiany

Od czasu Klucz parametr jest przekazywany przez odwołanie, procedura obsługi zdarzeń może się zmienić Klucz dzięki czemu aplikacja widzi inny klucz jako zaangażowany w zdarzenie. Jest to sposób na ograniczenie rodzaju znaków, które użytkownik może wprowadzić, na przykład aby zapobiec wpisywaniu klawiszy alfanumerycznych.

gdyby Klucz w ['a'.. 'z'] + ['A'.. 'Z'] następnie Klucz: = # 0 

Powyższe oświadczenie sprawdza, czy Klucz parametr jest w połączeniu dwóch zestawów: małych liter (tj. za przez z) i wielkie litery (A-Z). Jeśli tak, instrukcja przypisuje wartość znaku zero do Klucz aby zapobiec wszelkim wejściom do Edytować składnik, na przykład, gdy otrzymuje zmodyfikowany klucz.

W przypadku kluczy niealfanumerycznych, WinAPI wirtualne kody kluczy może być użyty do ustalenia naciśnięcia klawisza. Windows definiuje specjalne stałe dla każdego klawisza, który użytkownik może nacisnąć. Na przykład, VK_RIGHT to wirtualny kod klucza dla klawisza strzałki w prawo.

Aby uzyskać stan klucza niektórych kluczy specjalnych, takich jak PATKA lub Strona w górę, możemy użyć GetKeyState Wywołanie interfejsu API systemu Windows. Status klawisza określa, czy klawisz jest w górę, w dół, czy przełączony (włączony lub wyłączony - naprzemiennie po każdym naciśnięciu klawisza).

gdyby HiWord (GetKeyState (vk_PageUp)) <> 0 następnie
ShowMessage („PageUp - DOWN”)
jeszcze
ShowMessage („PageUp - UP”); 

w OnKeyDown i OnKeyUp wydarzenia, Klucz to wartość bez znaku programu Word, która reprezentuje klucz wirtualny systemu Windows. Aby uzyskać wartość postaci z Klucz,Używamy Chr funkcjonować. w OnKeyPress zdarzenie, Klucz jest Zwęglać wartość reprezentująca znak ASCII.

Obie OnKeyDown i OnKeyUp zdarzenia wykorzystują parametr Shift typu TShiftState, zestaw flag określających stan klawiszy Alt, Ctrl i Shift po naciśnięciu klawisza.

Na przykład po naciśnięciu klawiszy Ctrl + A generowane są następujące kluczowe zdarzenia:

 KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + „A”KeyPress (A) KeyUp (Ctrl + A)

Przekierowanie zdarzeń klawiatury do formularza

Aby przechwytywać naciśnięcia klawiszy na poziomie formularza, zamiast przekazywać je do jego składników, ustaw odpowiednie formy KeyPreview właściwość True (przy użyciu Inspektor obiektów). Komponent nadal rozpoznaje zdarzenie, ale formularz ma okazję najpierw go obsłużyć - na przykład zezwolić lub zabronić naciśnięcia niektórych klawiszy.

Załóżmy, że masz kilka komponentów edycji w formularzu i Formularz. OnKeyPress procedura wygląda następująco:

proceduraTForm1.FormKeyPress (Sender: TObject; var Klucz: Char); zaczynaćgdyby Klucz w ['0'..'9'] następnie Klucz: = # 0. koniec; 

Jeśli jeden ze składników edycji ma Skupiać, i KeyPreview właściwość formularza to False, ten kod nie zostanie wykonany. Innymi słowy, jeśli użytkownik naciśnie przycisk 5 klucz, 5 postać pojawi się w skoncentrowanym komponencie Edycja.

Jeśli jednak KeyPreview jest ustawiony na True, a następnie formularza OnKeyPress zdarzenie jest wykonywane, zanim komponent Edycja zobaczy naciśnięty klawisz. Ponownie, jeśli użytkownik nacisnął przycisk 5 klawisz, a następnie przypisuje wartość zero do klucza, aby uniemożliwić wprowadzanie liczbowe do komponentu edycji.

instagram story viewer