在 Windows 下,键盘的按键事件如下图:
以上按键事件传入的参数可以用来判断用户的按键行为:
- OnKeyDown 与 OnKeyUp
参数为用户按键的 Key 值(word值),代表 Windows 中的 Virtual Key Code。
- OnKeyPress
参数为一个 Char 值,是一个 ASCII 字符。
Virtual Key Code:
常数名称 |
十六进制值 |
十进制值 |
对应按键 |
VK_LBUTTON |
01 |
1 |
鼠标的左键 |
VK_RBUTTON |
02 |
2 |
鼠标的右键 |
VK-CANCEL |
03 |
3 |
Ctrl Break(通常不需要处理) |
VK_MBUTTON |
04 |
4 |
鼠标的中键(三按键鼠标) |
VK_BACK |
08 |
8 |
Backspace键 |
VK_TAB |
09 |
9 |
Tab键 |
VK_CLEAR |
0C |
12 |
Clear键(Num Lock关闭时的数字键盘5) |
VK_RETURN |
0D |
13 |
Enter键 |
VK_SHIFT |
10 |
16 |
Shift键 |
VK_CONTROL |
11 |
17 |
Ctrl键 |
VK_MENU |
12 |
18 |
Alt键 |
VK_PAUSE |
13 |
19 |
Pause键 |
VK_CAPITAL |
14 |
20 |
CapsLock键 |
VK_ESCAPE |
1B |
27 |
Ese键 |
VK_SPACE |
20 |
32 |
Spacebar键 |
VK_PRIOR |
21 |
33 |
PageUp键 |
VK_NEXT |
22 |
34 |
PageDomw键 |
VK_END |
23 |
35 |
End键 |
VK_HOME |
24 |
36 |
Home键 |
VK_LEFT |
25 |
37 |
LEFTARROW键(←) |
VK_UP |
26 |
38 |
UPARROW键(↑) |
VK_RIGHT |
27 |
39 |
RIGHTARROW键(→) |
VK_DOWN |
28 |
40 |
DOWNARROW键(↓) |
VK_Select |
29 |
41 |
Select键 |
VK_PRINT |
2A |
42 | |
VK_EXECUTE |
2B |
43 |
EXECUTE键 |
VK_SNAPSHOT |
2C |
44 |
Print Screen键(抓屏) |
VK_Insert |
2D |
45 |
Ins键(Num Lock关闭时的数字键盘0) |
VK_Delete |
2E |
46 |
Del键(Num Lock关闭时的数字键盘.) |
VK_HELP |
2F |
47 |
Help键 |
VK_0 |
30 |
48 |
0键 |
VK_1 |
31 |
49 |
1键 |
VK_2 |
32 |
50 |
2键 |
VK_3 |
33 |
51 |
3键 |
VK_4 |
34 |
52 |
4键 |
VK_5 |
35 |
53 |
5键 |
VK_6 |
36 |
54 |
6键 |
VK_7 |
37 |
55 |
7键 |
VK_8 |
38 |
56 |
8键 |
VK_9 |
39 |
57 |
9键 |
VK_A |
41 |
65 |
A键 |
VK_B |
42 |
66 |
B键 |
VK_C |
43 |
67 |
C键 |
VK_D |
44 |
68 |
D键 |
VK_E |
45 |
69 |
E键 |
VK_F |
46 |
70 |
F键 |
VK_G |
47 |
71 |
G键 |
VK_H |
48 |
72 |
H键 |
VK_I |
49 |
73 |
I键 |
VK_J |
4A |
74 |
J键 |
VK_K |
4B |
75 |
K键 |
VK_L |
4C |
76 |
L键 |
VK_M |
4D |
77 |
M键 |
VK_N |
4E |
78 |
N键 |
VK_O |
4F |
79 |
O键 |
VK_P |
50 |
80 |
P键 |
VK_Q |
51 |
81 |
Q键 |
VK_R |
52 |
82 |
R键 |
VK_S |
53 |
83 |
S键 |
VK_T |
54 |
84 |
T键 |
VK_U |
55 |
85 |
U键 |
VK_V |
56 |
86 |
V键 |
VK_W |
57 |
87 |
W键 |
VK_X |
58 |
88 |
X键 |
VK_Y |
59 |
89 |
Y键 |
VK_Z |
5A |
90 |
Z键 |
VK_NUMPAD0 |
60 |
96 |
数字键0键 |
VK_NUMPAD1 |
61 |
97 |
数字键1键 |
VK_NUMPAD2 |
62 |
98 |
数字键2键 |
VK_NUMPAD3 |
62 |
99 |
数字键3键 |
VK_NUMPAD4 |
64 |
100 |
数字键4键 |
VK_NUMPAD5 |
65 |
101 |
数字键5键 |
VK_NUMPAD6 |
66 |
102 |
数字键6键 |
VK_NUMPAD7 |
67 |
103 |
数字键7键 |
VK_NUMPAD8 |
68 |
104 |
数字键8键 |
VK_NUMPAD9 |
69 |
105 |
数字键9键 |
VK_MULTIPLY |
6A |
106 |
数字键盘上的*键 |
VK_ADD |
6B |
107 |
数字键盘上的 键 |
VK_SEPARATOR |
6C |
108 |
Separator键 |
VK_SUBTRACT |
6D |
109 |
数字键盘上的-键 |
VK_DECIMAL |
6E |
110 |
数字键盘上的.键 |
VK_DIVIDE |
6F |
111 |
数字键盘上的/键 |
VK_F1 |
70 |
112 |
F1键 |
VK_F2 |
71 |
113 |
F2键 |
VK_F3 |
72 |
114 |
F3键 |
VK_F4 |
73 |
115 |
F4键 |
VK_F5 |
74 |
116 |
F5键 |
VK_F6 |
75 |
117 |
F6键 |
VK_F7 |
76 |
118 |
F7键 |
VK_F8 |
77 |
119 |
F8键 |
VK_F9 |
78 |
120 |
F9键 |
VK_F10 |
79 |
121 |
F10键 |
VK_F11 |
7A |
122 |
F11键 |
VK_F12 |
7B |
123 |
F12键 |
VK_NumLock |
90 |
144 |
NumLock键 |
VK_SCROLL |
91 |
145 |
ScrollLock键 |
VK_LWIN |
91 |
左win键 | |
VK_RWIN |
92 |
右win键 | |
VK_APPS |
93 |
右Ctrl左边键,点击相当于点击鼠标右键,会弹出快捷菜单 | |
186 |
;(分号) | ||
187 |
=键 | ||
188 |
,键(逗号) | ||
189 |
-键(减号) | ||
190 |
.键(句号) | ||
191 |
/键 | ||
192 |
`键(Esc下面) | ||
219 |
[键 | ||
220 |
\键 | ||
221 |
]键 | ||
222 |
'键(引号) |
- OnKeyDown
在键盘上按下任意一个键都会触发该事件。对于字母键、数字键、功能键、Ctrl、Shift 或 Alt 等键都将触发该事件。
- OnKeyPress
在键盘上按下一个字符键会触发该事件,单独按下功能键、Ctrl、Shift 或 Alt 等键不会触发该事件。
- OnKeyUp
在按下键盘上任一键后松开时会触发该事件。对于字母键、数字键、功能键、Ctrl、Shift 或 Alt 等键都将触发该事件。
- TShiftState
在 OnKeyDown、OnKeyUp、OnMouseDown 和 OnMouseUp 等事件中,包含一个类型为 TShiftState 的变量 Shift,其值用于判断当键盘上的键按下时,Shift、Alt 和 Ctrl 键的状态,或者按下鼠标的状态。
TShiftState 类型的定义:
Type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
1.3键盘编程示例示例一:在按键过程中让窗体颜色发生变化。
var
FormColor: TColor;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
FormColor := Form1.Color;
Form1.Color := clGreen;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Form1.Color := FormColor;
end;
示例二:模拟按下键盘的某个键。
在该例中,需要使用 Delphi WinAPI 消息函数 PostMessage,界面如下:
示例代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
// a
PostMessage(Edit1.Handle, WM_KEYDOWN, 65, 0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// b
PostMessage(Edit1.Handle, WM_KEYDOWN, 66, 0);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
// c
PostMessage(Edit1.Handle, WM_KEYDOWN, 67, 0);
end;
示例三:在屏幕上输出按键操作的结果,包括:Shift、Alt和Ctrl键。界面如下:
示例代码:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Label1.Caption := '';
if Shift >= [ssShift] then
Label1.Caption := 'Shift ';
if Shift >= [ssAlt] then
Label1.Caption := 'Alt ';
if Shift >= [ssCtrl] then
Label1.Caption := 'Ctrl ';
Label1.Caption := Label1.Caption inttostr(key);
end;
,