第 十八 讲
一鼠标器
MouseDown、MouseUp和MouseMove事件
1.定义:
鼠标事件是由用户操作鼠标而引发的能被VB中的各种对象识别的事件。
2.触发条件:
将鼠标置于对象上时,鼠标任一键被按下时,则触发鼠标按下事件Mousedown;;当释放鼠标按键时,则触发产生鼠标的释放事件Mouseup。鼠标指针在对象区域内移动时产生Mousemove事件。
3.事件过程格式:
Private sub 对象名_Mousedown(Button as integer,Shift as integer,X as single,Y as single)
Private sub 对象名_Mouseup(Button as integer,Shift as integer,X as single,Y as single)
Private sub 对象名_Mousemove(Button as integer,Shift as integer,X as single,Y as single)
说明:
(1)Button被用户按下或释放的鼠标器按钮的值。
(2)Shift 是否按下 Shift 、 Ctrl 、 Alt 等三个键的状态值。
(3)X和Y当前鼠标的位置,采用ScaleMode属性指定的位置。
(4)详细的状态值如下:
Shift值键盘按键的状态
- Shift 键被按下
- Ctrl 键被按下
- Alt 键被按下
Button值鼠标按键的状态
4鼠标的中间键被按下
例1 显示鼠标器指针所指定的位置。
用两个文本框显示鼠标器指针所指的位置,它们的名称分别为txtX和txtY。
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
txtX.Text = X
txtY.Text = Y
End Sub
例2 设计一个最简单的画图程序。
程序运行时,按下鼠标右键画圆,按下鼠标左键移动时画线。
Dim drawstate As Boolean
Dim prex As Single
Dim prey As Single
Private Sub Form_Load()
'将drawstate初始化为False
drawstate = False
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
'当鼠标左键被按下时,把drawstate设为True,表示开始画线
drawstate = True '设置画图状态
MousePointer = vbCustom '鼠标指针使用用户指定的样式
'装入图标IE_B.ico作为鼠标指针
MouseIcon = LoadPicture("IE_B.ico")
'Prex和Prey保存线条的起点
prex = X
prey = Y
End If
If Button = 2 Then
'当鼠标右键被按下时,画一个直径为280的圆
Circle (X, Y), 280
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'当鼠标移动时,如果处于画线状态,则用Line方法在(prex,prey)与(x,y)之间画一条直线'
If drawstate = True Then
Line (prex, prey)-(X, Y)
prex = X
prey = Y
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
MousePointer = vbDefault '鼠标指针恢复原样
drawstate = False '当鼠标左键被释放时,解除画线状态
End If
End Sub
例3 鼠标移动实例
二 键盘
(一) KeyDown事件、KeyUp事件
1.定义:当一个对象具有焦点,用户按下或松开一个键盘时发生的事件。
2.语法:
Sub object_KeyDown(Keycode As Integer,shift As integer)
Sub object_KeyUp(Keycode As Integer,shift As integer)
说明:
keycode表示一个键的代码;而Shift则表示在该事件发生时反应SHIFT、CTRL和ALT键状态的一个整数。
shift参数的设置值如下表:
常数和数值 |
功 能 |
vbShiftMask=1 |
SHIFT键的位屏蔽 |
vbCtrlMask |
CTRL键的位屏蔽 |
vbAltMask |
ALT键的位屏蔽 |
shift参数是一个位域,它用最少的位反应SHIFT(0位)、CTRL(1位)和ALT(2位)的状态,我们可以通过对某些位的设置来指明有哪些键被按下,例如:同时按下SHIFT和CTRL键,则shift的值为3。
KeyDown和KeyUp事件提供了最低级的键盘响应,它可以检测KeyPress事件无法检测到的下列击键。
·SHIFT、CTRL和ALT键的组合;
·箭头键、PAGEUP和PAGEDOWN键;
·区分数值小键盘的数字键与打字大键盘的数值键盘等。
附:键码常数
常数和数值 |
描 述 |
vbKeyLButton=1 |
鼠标左键 |
vbKeyRButton=2 |
鼠标右键 |
vbKeyCancel=3 |
CANCEL 键 |
vbKeyMButton=4 |
鼠标中键 |
vbKeyBack=8 |
BACKSPACE 键 |
vbKeyTab=9 |
TAB 键 |
vbKeyClear=12 |
CLEAR 键 |
vbKeyReturn=13 |
ENTER 键 |
vbKeyShift=16 |
SHIFT 键 |
vbKeyControl=17 |
CTRL 键 |
vbKeyMenu=18 |
菜单键 |
vbKeyPause=19 |
PAUSE 键 |
vbKeyCapital=20 |
CAPS LOCK 键 |
vbKeyEscape=27 |
ESC 键 |
vbKeySpace=32 |
SPACEBAR 键 |
vbKeyPageUp=33 |
PAGEUP 键 |
vbKeyPageDown=34 |
PAGEDOWN 键 |
vbKeyEnd=35 |
END 键 |
vbKeyHome=36 |
HOME 键 |
vbKeyLeft=37 |
LEFT ARROW 键 |
vbKeyUp=38 |
UP ARROW 键 |
vbKeyRight=39 |
RIGHT ARROW 键 |
vbKeyDown=40 |
DOWN ARROW 键 |
vbKeySelect=41 |
SELECT 键 |
vbKeyPrint=42 |
PRINT SCREEN 键 |
vbKeyExecute=43 |
EXECUTE 键 |
vbKeySnapshot=44 |
SNAP SHOT 键 |
vbKeyInser=45 |
INSERT 键 |
vbKeyDelete=46 |
DELETE 键 |
vbKeyHelp=47 |
HELP 键 |
vbKeyNumlock=144 |
NUM LOCK 键 |
A 键到 Z 键
常数和数值 |
描 述 |
vbKeyA=65 |
A 键 |
vbKeyB=66 |
B 键 |
vbKeyC=67 |
C 键 |
vbKeyD=68 |
D 键 |
vbKeyE=69 |
E 键 |
vbKeyF=70 |
F 键 |
vbKeyG=71 |
G 键 |
vbKeyH=72 |
H 键 |
vbKeyI=73 |
I 键 |
vbKeyJ=74 |
J 键 |
vbKeyK=75 |
K 键 |
vbKeyL=76 |
L 键 |
vbKeyM=77 |
M 键 |
vbKeyN=78 |
N 键 |
vbKeyO=79 |
O 键 |
vbKeyP=80 |
P 键 |
vbKeyQ=81 |
Q 键 |
vbKeyR=82 |
R 键 |
vbKeyS=83 |
S 键 |
vbKeyT=84 |
T 键 |
vbKeyU=85 |
U 键 |
vbKeyV=86 |
V 键 |
vbKeyW=87 |
W 键 |
vbKeyX=88 |
X 键 |
vbKeyY=89 |
Y 键 |
vbKeyZ=90 |
Z 键 |
0 键到 9 键
常数和数值 |
描 述 |
vbKey0=48 |
0 键 |
vbKey1=49 |
1 键 |
vbKey2=50 |
2 键 |
vbKey3=51 |
3 键 |
vbKey4=52 |
4 键 |
vbKey5=53 |
5 键 |
vbKey6=54 |
6 键 |
vbKey7=55 |
7 键 |
vbKey8=56 |
8 键 |
vbKey9=57 |
9 键 |
数字小键盘上的键
常数和数值 |
描 述 |
vbKeyNumpad0=96 |
0 键 |
vbKeyNumpad1=97 |
1 键 |
vbKeyNumpad2=98 |
2 键 |
vbKeyNumpad3=99 |
3 键 |
vbKeyNumpad4=100 |
4 键 |
vbKeyNumpad5=101 |
5 键 |
vbKeyNumpad6=102 |
6 键 |
vbKeyNumpad7=103 |
7 键 |
vbKeyNumpad8=104 |
8 键 |
vbKeyNumpad9=105 |
9 键 |
vbKeyMultiply=106 |
乘号 (*) 键 |
vbKeyAdd=107 |
加号 (+) 键 |
vbKeySeparator=108 |
ENTER 键(在数字小键盘上) |
vbKeySubtract=109 |
减号 (-) 键 |
vbKeyDecimal=110 |
小数点 (.) 键 |
vbKeyDivide=111 |
除号 (/) 键 |
功能键
常数和数值 |
描 述 |
vbKeyF1=112 |
F1 键 |
vbKeyF2=113 |
F2 键 |
vbKeyF3=114 |
F3 键 |
vbKeyF4=115 |
F4 键 |
vbKeyF5=116 |
F5 键 |
vbKeyF6=117 |
F6 键 |
vbKeyF7=118 |
F7 键 |
vbKeyF8=119 |
F8 键 |
vbKeyF9=120 |
F9 键 |
vbKeyF10=121 |
F10 键 |
vbKeyF11=122 |
F11 键 |
vbKeyF12=123 |
F12 键 |
vbKeyF13=124 |
F13 键 |
vbKeyF14=125 |
F14 键 |
vbKeyF15=126 |
F15 键 |
vbKeyF16=127 |
F16 键 |
例4 下面的事件过程处理在文本框Text1种使用F1与Alt、Shift和Ctrl三个组合键组合使用时的事件。
(二) KeyPress事件
1.定义:
当用户按下或松开一个键时发生该事件
2.语法:
Sub object_KeyPress(keyascii As Integer)
说明:keyascii返回一个标准数字ANSI键代码的整数,当keyascii的值为0时可以取消点击键盘的行为。
KeyPaess事件过程在载取输入的击键时是非常有用的,它可以测试击键的有效性、限制字符输入或在输入时对其进行格式化处理。改变keyascii的值可以改变所显示的字符。
KeyPress事件不显示键盘的物理状态,只传递一个字符它将每个字符的大、小写形式作为不同的键代码,即作为两种不同的字符。
使用Chr(Keyascii)函数可以将Keyascii参数转变为一个字符;使用Keyascii=Asc(char)表达式可以将一个字符转变为ANSI数字。
例5
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
Beep
KeyAscii = 0
End If
End Sub
复习前面所学知识:
1. 作业
2. 复习命令按钮、单选钮和复选框的使用方法及加载图形的方法 |