Delphi’de klavye işlemleri

Delphi’de klavye işlemleri için OnKeyPress, OnKeyDown ve OnKeyUp olayları kullanılır. OnKeyPress ve OnKeyDown tuşa basıldığında, OnKeyUp olayı ise tuş bırakıldığında oluşur. Tüm
bu olayların ortak Key parametresi vardır.

Örneğin Ctrl + B tuşlarına beraber basıldığında olayların oluş sırası şu şekildedir :

OnKeyDown (Ctrl) // ssCtrl
OnKeyDown (Ctrl+B) // ssCtrl + ‘B’
OnKeyPress (B)
OnKeyUp (Ctrl+B)

OnKeyPress olayı

OnKeypress ile klavyeden Ascii karakter okunur. Okunan Key karakterinde küçük büyük harf ayrımı vardır. Aşağıdaki kod basılan tuşun hem kendisini hemde Ascii karşılığını vermektedir. (Formun KeyPreview özelliği True olmalıdır).

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 ShowMessage(Key+ ' - ('+IntToStr(Ord(Key))+ ') tuşuna basıldı');
end;

OnKeyPress olayı ile Ctrl, Shift vb gibi tuşları yakalamak imkansızdır. Bu sebepten dolayı OnKeyDown ve OnKeyUp olayları kullanılmalıdır.

OnKeyDown ve OnKeyUp olayları

OnKeyDown klavyede tuşa basıldığında, OnKeyUp olayı ise tuş bırakıldığında oluşur. Bu olaylarla basılan tuşun yanında Ctrl, Shift vb kontrol tuşları da okunabilir. Okunan Key parametresinde küçük büyük harf ayrımı yoktur. Shift parametresi ile Klavyenin Shift, Alt, Ctrl tuşları (ssShift, ssAlt, ssCtrl) ile Farenin Sol tuşu, Sağ Tuşu, Orta Tuşu ve Çift Tıklama (ssLeft, ssRight, ssMiddle, ssDouble) kullanılıp kullanılmadığı okunabilir. (Formun KeyPreview özelliği True olmalıdır).

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = 84) and (Shift = [ssCtrl]) then // Onlu 84 = Onaltılı 54 = T
    ShowMessage('Ctrl+T tuşlarına basıldı!');

  if (Key = 83) and (Shift = [ssShift, ssCtrl]) then // Onlu 83 = Onaltılı 53 = S
    ShowMessage('Ctrl+Alt+S tuşlarına basıldı!');

  if (Key = VK_RIGHT) and (Shift = [ssAlt]) then 
    ShowMessage('Alt+Sağ Yön tuşlarına basıldı!');

  if (Key = VK_F1) and (Shift = [ssAlt]) then
    ShowMessage('Alt+F1 tuşlarına basıldı!');
end;

Focus nedir?

Focus, bir bileşenin o an aktif olup klavye veya fareden kullanıcı girişi alabilmesidir. Sadece TWinControl’den türetilmiş bileşenlerin Focus özelliği vardır. Diğer bileşenlerin Focus özelliği yoktur. Focus özelliği olan bir bileşen aktif edilmesi isteniyorsa SetFocus metodu (Örneğin Edit1.SetFocus;) kullanılabilir. Bileşen kullanıcı tarafından veya SetFocus metoduyla aktif edildinde klavyeden basılan her tuş veya fare işlemi ona gönderilir.

GetKeyState fonksiyonu

Klavyeden Tuş okumak için kullanılabilecek bir başka yöntem GetKeyState fonksiyonudur. Bu fonksiyon iki baytlık değer üretir. Tuşa basıldığında Üst (high) bayt dizisi 1 (set) olur. Sayı işaretli tamsayı olduğundan üst bitlerin en başındaki işaret bitinin 1 olması sayının negatif olmasına sebep olacaktır. Tuşa basıldığı bu şekilde anlaşılabilir. (Kontrol başka sekillerde de yapılabilir)

Aşağıdaki örnekte birden fazla tuşa basıldığı kontrol edilmektedir. (Formun KeyPreview özelliği True olmalıdır)

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  // Ctrl + Alt + 0 tuşları
  if (
      (GetKeyState( VK_CONTROL ) < 0) and
      (GetKeyState( VK_MENU ) < 0) and
      (GetKeyState( Ord('0') ) < 0)
     ) then ShowMessage('Ctrl-Alt-0 tuşlarına basıldı!');
end;

Control Tuşu için VK_CONTROL, Alt tuşu için VK_MENU, Shift tuşu için VK_SHIFT kullanılmaktadır.

Klavye Kodları

Değer Onaltılı (Hexadecimal) şekildedir

SABİT İSMİ  DEĞER    KLAVYE EŞDEĞERİ
.....................................
VK_LBUTTON	01	Fare sol tuşu
VK_RBUTTON	02	Fare sağ tuşu
VK_CANCEL	03	Control-break
VK_MBUTTON	04	Fare orta tuşu
VK_BACK	    08	BACKSPACE tuşu
VK_TAB	    09	TAB tuşu
VK_RETURN	0D	ENTER tuşu
VK_SHIFT	10	SHIFT tuşu
VK_CONTROL	11	CTRL tuşu
VK_MENU	    12	ALT tuşu
VK_PAUSE	13	PAUSE tuşu
VK_CAPITAL	14	CAPS LOCK Tuşu
VK_ESCAPE	1B	ESC Tuşu
VK_SPACE	20	SPACEBAR (Boşluk) tuşu
VK_PRIOR	21	PAGE UP tuşu
VK_NEXT     22	PAGE DOWN tuşu
VK_END	    23	END tuşu
VK_HOME	    24	HOME tuşu
VK_LEFT	    25	LEFT ARROW (Sol) tuşu
VK_UP	    26	UP ARROW (Yukarı) tuşu
VK_RIGHT    27	RIGHT ARROW (Sağ) tuşu
VK_DOWN	    28	DOWN ARROW (Aşağı) tuşu
VK_SNAPSHOT	2C	PRINT SCREEN tuşu
VK_INSERT	2D	INS tuşu
VK_DELETE	2E	DEL tuşu
         	30	0 tuşu
 	        31	1 tuşu
 	        32	2 tuşu
 	        33	3 tuşu
 	        34	4 tuşu
 	        35	5 tuşu
 	        36	6 tuşu
 	        37	7 tuşu
 	        38	8 tuşu
 	        39	9 tuşu
 	        41	A tuşu
 	        42	B tuşu
 	        43	C tuşu
 	        44	D tuşu
 	        45	E tuşu
 	        46	F tuşu
 	        47	G tuşu
 	        48	H tuşu
 	        49	I tuşu
 	        4A	J tuşu
 	        4B	K tuşu
 	        4C	L tuşu
 	        4D	M tuşu
 	        4E	N tuşu
 	        4F	O tuşu
 	        50	P tuşu
 	        51	Q tuşu
 	        52	R tuşu
 	        53	S tuşu
 	        54	T tuşu
 	        55	U tuşu
 	        56	V tuşu
 	        57	W tuşu
 	        58	X tuşu
 	        59	Y tuşu
 	        5A	Z tuşu
VK_NUMPAD0	60	Nümerik Klavye 0 tuşu
VK_NUMPAD1	61	Nümerik Klavye 1 tuşu
VK_NUMPAD2	62	Nümerik Klavye 2 tuşu
VK_NUMPAD3	63	Nümerik Klavye 3 tuşu
VK_NUMPAD4	64	Nümerik Klavye 4 tuşu
VK_NUMPAD5	65	Nümerik Klavye 5 tuşu
VK_NUMPAD6	66	Nümerik Klavye 6 tuşu
VK_NUMPAD7	67	Nümerik Klavye 7 tuşu
VK_NUMPAD8	68	Nümerik Klavye 8 tuşu
VK_NUMPAD9	69	Nümerik Klavye 9 tuşu
VK_F1	    70	F1 tuşu
VK_F2	    71	F2 tuşu
VK_F3	    72	F3 tuşu
VK_F4	    73	F4 tuşu
VK_F5	    74	F5 tuşu
VK_F6	    75	F6 tuşu
VK_F7	    76	F7 tuşu
VK_F8	    77	F8 tuşu
VK_F9	    78	F9 tuşu
VK_F10	    79	F10 tuşu
VK_F11	    7A	F11 tuşu
VK_F12	    7B	F12 tuşu
VK_NUMLOCK	90	NUM LOCK tuşu
VK_SCROLL	91	SCROLL LOCK tuşu
Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.