1.键盘编程1.1键盘

在 Windows 下,键盘的按键事件如下图:

怎么进入编程界面(9.键盘鼠标和文件编程)(1)

以上按键事件传入的参数可以用来判断用户的按键行为:

参数为用户按键的 Key 值(word值),代表 Windows 中的 Virtual Key Code。

参数为一个 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

'键(引号)

1.2键盘事件

在键盘上按下任意一个键都会触发该事件。对于字母键、数字键、功能键、Ctrl、Shift 或 Alt 等键都将触发该事件。

在键盘上按下一个字符键会触发该事件,单独按下功能键、Ctrl、Shift 或 Alt 等键不会触发该事件。

在按下键盘上任一键后松开时会触发该事件。对于字母键、数字键、功能键、Ctrl、Shift 或 Alt 等键都将触发该事件。

在 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,界面如下:

怎么进入编程界面(9.键盘鼠标和文件编程)(2)

示例代码:

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键。界面如下:

怎么进入编程界面(9.键盘鼠标和文件编程)(3)

示例代码:

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;

,