海尔网站建设水平,观光园网站建设,网站建设哪家做的好一点,做网站那个公司除了常用的Click和DblClick事件之外#xff0c;有些程序还需要对鼠标指针的位置和状态变化做出响应#xff0c;因此需要使用鼠标事件MouseUp#xff0c;MouseDown和MouseMove。当鼠标指针位于窗体上方时#xff0c;窗体将识别鼠标事件。当鼠标指针在控件上方时#xff0c;…除了常用的Click和DblClick事件之外有些程序还需要对鼠标指针的位置和状态变化做出响应因此需要使用鼠标事件MouseUpMouseDown和MouseMove。当鼠标指针位于窗体上方时窗体将识别鼠标事件。当鼠标指针在控件上方时控件将识别鼠标事件。如果在对象上按下鼠标按钮不放则该对象将继续识别所有鼠标事件直到用户释放鼠标即使此时指针已移开该对象情况也是如此。鼠标事件与ClickDblClick事件不同的是可以区分鼠标的左、右、中键与ShiftCtrlAlt键并可识别和响应各种鼠标状态。鼠标事件的语法格式为Private Sub 对象_鼠标事件(Button As Integer, Shift As Integer, X As Single, Y As Single)说明(1) Button表示哪个鼠标键被按下或释放。用012位表示鼠标的左、右、中键每位用10表示被按下或释放三个位的二进制转换成十进制就是Button的值如图8.15所示。例如同时按下左、右按钮就会产生数值3(12)。(2) Shift表示当鼠标键被按下或释放时ShiftCtrlAlt键的按下或释放状态。用012位表示鼠标的ShiftCtrlAlt键。三个位的二进制转换成十进制就是Shift值。(3) XY表示鼠标指针的坐标位置。如果鼠标指针在窗体或图片框中用该对象内部的坐标系其他控件则用控件对象所在容器的坐标系。图8.15 Button键1MouseDown和MouseUp事件MouseDown和MouseUP事件是当鼠标按下或释放时触发通常用来在运行时调整控件在窗体上的位置或实现某些图形效果。将MouseDown事件与Move方法结合起来使用就可以将命令按钮移动到窗体的不同位置。鼠标指针的位置决定按钮的新位置在单击窗体的任意位置时控件将移动到光标位置。过程From_MouseDown将执行此操作Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _X As Single, Y As Single)Command1.Move X, YEnd Sub使用MouseDown事件和Line方法在先前的绘制位置与鼠标指针的新位置之间画一条直线则可用下面的语句实现Line -(X, Y)如图8.16所示第一条直线开始于缺省起点也就是左上角。无论何时只要按下鼠标按钮应用程序就会绘制一条从先前直线终点到鼠标目前位置的直线。图8.16 使用MouseDown事件绘制连接的直线 图8.17 结合MouseUp和MouseDown事件画直线释放鼠标按钮时MouseUp事件将发生。例如在窗体中画线在鼠标按钮按下的位置出现一个端点在鼠标按钮被释放的位置出现另一个端点Dim X1, Y1Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _X As Single, Y As Single)X1 X: Y1 YEnd SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, _X As Single, Y As Single)Line (X1, Y1)-(X, Y)End Sub当MouseDown事件发生时鼠标指针的位置被保存到X1和Y1中。当MouseUp事件发生时则以X1Y1为起点坐标当前鼠标指针位置XY为终点绘制一条直线如图8.17所示。2MouseMove事件当鼠标指针在屏幕上移动时就会发生MouseMove事件窗体和控件均能识别该事件。使用图形方法在MousrMove过程的效果与在MouseDown过程中的效果截然不同例如前面在MouseDown事件中使用Line方法是绘制连接的直线而将Line方法放入在MouseMove过程中则绘制曲线如图8.18所示。图8.18 使用MouseMove事件绘制曲线 图8.19 MouseMove发生频率的演示当移动鼠标时MouseMove事件不断发生但并不是对鼠标经过的每个象素都会触发。例如在Form_MouseMove事件过程中加入Circle方法Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _X As Single, Y As Single)Line -(X, Y)Circle (X, Y), 50End Sub如图8.19所示鼠标指针移动得越快在两点之间触发的MouseMove事件越少众多圆圈挤在一起表明鼠标在此位置移动缓慢。由于应用程序能接二连三地触发大量的MouseMove事件因此MouseMove事件不应去做需要大量时间的工作。Button参数对于MouseMove事件与MouseDownMouseUp事件不同MouseMove事件的Button值表示所有按键的状态而MouseDown和MouseUp事件的Button的值无法检测是否同时按下两个以上的按键。【例8.5】 制作一个简单的画图程序使其具有绘画、擦除功能。在窗体中添加一个图片框Picture1两个按钮(数组形式)如图8.20所示。当单击绘画按钮后在Picture1中按下鼠标左键后拖动就可以随意地画线或写字释放鼠标后就停止画线。单击擦除按钮可通过画一个白色的圆点将图像擦除。图8.20 画图程序代码如下Option ExplicitDim MouseState As IntegerDim Isdraw As BooleanPrivate Sub Command1_Click(Index As Integer)Select Case IndexCase 0 单击绘画按钮MouseState 1Case 1 单击擦除按钮MouseState 2End SelectEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, _X As Single, Y As Single)If Button 1 And MouseState 2 ThenPicture1.FillStyle 0Picture1.FillColor RGB(255, 255, 255)Picture1.ForeColor RGB(255, 255, 255)Picture1.Circle (X, Y), 50ElseIf Button 1 And MouseState 1 ThenIsdraw TruePicture1.CurrentX XPicture1.CurrentY YEnd IfPicture1.AutoRedraw TrueEnd SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, _X As Single, Y As Single)Picture1.ForeColor RGB(0, 0, 0)If Isdraw And MouseState 1 ThenPicture1.Line -(X, Y)End IfEnd SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, _X As Single, Y As Single)If Button 1 And MouseState 1 Then Isdraw FalseEnd Sub同时使用了MouseMoveMouseDown和MouseUP事件当鼠标按下时触发MouseDown事件当鼠标移动时触发MouseMove事件线的起点为上次的终点当鼠标释放时触发MouseUp事件使变量Isdraw为False就不能画线。3. 改变鼠标指针在Windows环境中可以用不同的鼠标指针反映信息。如在调整窗口的大小时使用箭头形状的鼠标指针在移动窗体时用十字线的鼠标指针。鼠标指针可以通过MousePionter和MouseIcon属性来设置。对象的MousePionter属性用于设置鼠标指针的形状。在运行时对于控件当鼠标经过时就会显示MousePionter属性设置的形状对于窗体当鼠标经过空白区域或窗体中的MousePionter属性为0的控件时就会显示窗体的MousePionter属性设置的形状。例如改变经过文本框Text1时鼠标指针的形状为Ⅰ型Text1.MousePointer 3当MousePointer属性为99时可以使用MouseIcon属性来确定鼠标指针的形状。