VB获取任意时刻鼠标位置
VB中的键盘事件、鼠标事件、拖放技术
VB中的键盘事件、鼠标事件、拖放技术键盘事件:参数是KeyAscii,每次按一下键盘上的一个键,相应的键的Ascii码值都要赋给参数KeyAscii,然后再执行相应的操作KeyPreview:接受键盘事件。
默认情况下,窗体的KeyPreview 属性为False,只有窗体获得焦点才能相应键盘事件;若窗体的KeyPreview属性为True,窗体会在空件之前首先截获键盘事件。
Shift And 7: 取Shift参数的低三位,因为7的二进制数是111,shift参数与111进行按位And运算,得到是按了三个功能键中的哪一个。
命令按钮控件的default属性用于设置默认命令按钮.,设置为true时,按[Enter键]相当于用鼠标单击了该按钮,Cancel属性为True,则Esc键触发按钮的Click事件快捷键的优先级高于键盘事件,鼠标事件:参数X和Y表示鼠标指针的位置Clc:清除图像。
划线函数Line格式:Line (x1, y1) -(x2, y2), [color], [B][F](x1, y1) 可选的。
Single (单精度浮点数),直线或矩形的起点坐标。
(x2, y2) 必选的。
Single (单精度浮点数),直线或矩形的终点坐标。
color 可选的。
Long (长整型数),画线时用的 RGB 颜色,可用RGB函数B 可选的。
如果包括,则利用对角坐标画出矩形。
F 可选的。
如果使用了 B 选项,则 F 选项规定矩形以矩形边框的颜色填充。
不能不用 B 而用F。
例:Line (0, 0)-(X, Y), vbGreen, BF拖放技术:DragMode属性:0—手动拖放,1—自动拖放DragDrop事件:Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)Source.Move X, YEnd Sub---Source表示拖放的控件,即DragMode属性为1的控件;xy 表示鼠标指针的位置坐标。
VB模拟鼠标操作
模拟鼠标操作全局级模拟GetCursorPos/GetCursorPos两个重要函数,获取光标位置与设置光标位置,详细说明请参考本站另一篇文章-经典API函数。
mouse_event模拟鼠标操作的主函数。
涉及API函数列表:Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As LongPrivate Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPrivate Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpstring As String, ByVal cch As Long) As LongPrivate Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongPrivate Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As IntegerPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Type POINTAPIx As Longy As LongEnd TypeDim lpPoint As POINTAPI,sp as LongSub leftdown() '左键单击Dim lpstr As Stringlpstr = Space(255)GetCursorPos lpPointsp = WindowFromPoint(lpPoint.x, lpPoint.y)GetWindowText sp, lpstr, 255ShowWindow sp, SW_NORMALOn Error Resume NextAppActivate RTrim(lpstr)mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0End Sub先来看这个封装的leftdown()过程:第一句,声明一个字符串型变量;第二句,预置缓冲区为255个空字符,因为下面的函数需要将窗口标题字符串放入该缓冲区;第三句,获得光标当前位置,该位置信息被置入POINTAPI型变量lpPoint中,这是一个结构体,其中两个成员变量x,y分别为光标的横坐标,纵坐标;第四句,WindowFromPoint()函数返回光标下目标的句柄,赋给Long型变量sp,很有用的一个函数;第五句,ShowWindow()函数,显示一个窗口,其参数分别为目标窗口的句柄(第四句已获得)和显示样式,常用函数;第六句,容错,因为操作系统运行的不确定性,加容错语句以防万一;第七句,AppActivate()函数,激活一个窗口为活动窗口,其参数为窗口标题字符串(第四句已获得),刚才缓冲区被置了很大,所以需要去串的右端空格;第八句和第九句,关键所在,mouse_event()函数,左键单击只需设置第一个参数,其它参数用途请参考MSDN。
VB程序中实现鼠标
在VB程序中实现鼠标右键双击西北工业大学(710072) 况正谦在Microsoft Visual BASIC(VB)中,窗体(Form)和控件(Control)等对象的单击(Click)和双击(Double-Click)事件都是指鼠标左键而言的。
鼠标右键的单击和双击事件在VB中没有对应的事件驱动过程去响应和处理。
但是在实际应用中(特别是一些可视化的图形软件)可能对鼠标键的功能定义比较丰富,单靠鼠标左键的单击和双击难以满足复杂的需要。
因此有必要开发和扩充VB应用程序对鼠标右键的响应能力。
VB定义的鼠标事件VB定义的鼠标事件有五种:单击(Click)、双击(DblClick)、鼠标键按下(MouseDown)、鼠标键松开(MouseUp)和鼠标光标移动(MouseMove)。
其中前两种事件单击和双击是专指鼠标左键而言,后三种则适用于所有鼠标键。
后三种鼠标事件的事件驱动过程有如下的形式: Sub对象名-鼠标事件(Button As Integer,Shift As Integer, X As Single, Y As Single) 用户插入的事件响应和处理代码End Sub 传递给事件过程的参数中,整型数Button的最低三位从右到左分别对应鼠标左、右、中三个键。
事件发生时,哪个或哪些键处于被按下的状态,Button的对应位就为1,否则为0。
程序中可以用VB的位运算AND来检测鼠标键的状态。
整数Shift的最低三位从右到左分别对应事件发生时键盘的Shift、Ctrl、Alt键。
事件发生时,Shift、Ctrl、Alt中的哪个或哪些键处于被按下的状态,参数Shift 的对应位就为1,否则为0。
单精度值X和Y存放的是事件发生时鼠标光标的X-Y坐标值。
该值对于窗体对象而言是鼠标光标在窗体客户区中的坐标,对于控件对象则是鼠标光标在窗体客户区中相对于控件左上角的坐标。
鼠标右键事件的检测实际上,鼠标的单击事件可以被分解为MouseDown和MouseUp两个事件,所以我们可以用MouseDown事件来取代单击事件。
VB鼠标的API函数使用详解
VB鼠标的API函数使用详解1. MouseDown(Button, Shift, X, Y)该函数用于模拟鼠标按下按钮的动作,Button参数可以是常量vbLeftButton、vbRightButton或vbMiddleButton,用于指示要模拟按下的鼠标键;Shift参数可以是常量vbShiftMask、vbCtrlMask或vbAltMask,表示按下Shift、Ctrl、Alt键的状态,如果Shift参数没有指定,则默认为不按下Shift、Ctrl、Alt键;X参数表示鼠标按下点的横坐标,Y参数表示鼠标按下点的纵坐标。
2. MouseUp(Button, Shift, X, Y)该函数用于模拟鼠标抬起按钮的动作,Button参数可以是常量vbLeftButton、vbRightButton或vbMiddleButton,用于指示要模拟抬起的鼠标键;Shift参数可以是常量vbShiftMask、vbCtrlMask或vbAltMask,表示抬起Shift、Ctrl、Alt键的状态,如果Shift参数没有指定,则默认为不抬起Shift、Ctrl、Alt键;X参数表示鼠标抬起点的横坐标,Y参数表示鼠标抬起点的纵坐标。
3. MouseMove(X, Y)该函数用于模拟鼠标移动的动作,X参数表示鼠标移动目标点的横坐标,Y参数表示鼠标移动目标点的纵坐标。
4. MouseWheel(WheelClicks)该函数用于模拟鼠标滚轮操作,WheelClicks参数表示要模拟的滚轮点击数,每次滚轮转动一次,WheelClicks参数的值就会增加或减少一;如果是向前滚动,则WheelClicks参数值应该大于0;如果是向后滚动,则WheelClicks参数值应该小于0。
5. DragPicture(Picture, X1, Y1, X2, Y2, Mode)该函数用于拖拽图形,Picture参数表示拖拽对象。
在VB中如何用API监控鼠标和键盘
End Sub
′具体的钩子程序,本例中该过程被包含在Module1中
Public Function MyKBHook(ByVal nCode As Long,ByVal wParam As Long,ByVal lParam As Long)As Long
If nCode>=0 then
Open "C:\Keyfile.txt" For Append As #1 '将键盘的操作记录在Keyfile.txt文件之中
'记录所操作的键、操作时间、日期操作时的按键状态,用16进制记录
Write #1,wParam,Hex(lParam),Date,time
键盘:
A:在Timer控件中不断使用GetAsyncKeyState取得按键信息
B:使用Hook。
如果是普通键盘钩子(WH_KEYBOARD),系统级的需要将回掉函数放在dll中,但VB不能写普通dll(不能是VB的ActiveX DLL),需要用其他编程工具写(如VC++、Delphi、Borland C++ Builder)
B:使用Hook。
如果是鼠标键盘钩子(WH_MOUSE),系统级的需要将回掉函数放在dll中,但VB不能写普通dll(不能是VB的ActiveX DLL),需要用其他编程工具写(如VC++、Delphi、Borland C++ Builder)
如果是鼠标键盘钩子(WH_MOUSE_LL),则本身就是系统级的,不需要dll,但只能在NT系统(WinNT4/2000/XP/2003)下使用
VB鼠标的API函数大全
If Abs(x1 - x2) >= 4 Then
x1 = IIf(x1 > x2, x1 - 4, x1 + 4)
End If
If Abs(y1 - y2) >= 3 Then
y1 = IIf(y1 > y2, y1 - 3, y1 + 3)
y1 = (Me.Top + Command3.Top + Command3.Height / 2 + 405) \ 15
SetCursorPos x1, y1
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
MsgBox "退出前你现在是左撇子"
End Sub
Private Sub Form_Unload(Cancel As Integer)
SwapMouseButton False
MsgBox "鼠标左右键已灰复"
End Sub
2.得知鼠标位置
'添加 Timer1
y1 = (Me.Top + Command1.Top + Command1.Height / 2 + 405) \ 15
SetCursorPos x1, y1 '将鼠标移动到 Command1上面
End Sub
Private Sub Command1_Click()
Randomize
Dim x1&, y1&
Private Sub Form_Load()
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2 '窗体置于屏幕中心
vb键盘与鼠标事件过程
11.1.2 KeyDown和KeyUp事件
shift参数项返回一个整数,该整数相应于 〈Shift〉、 〈Ctrl〉和〈Alt〉键的状态。shift参数等于1、2和4分别表 示〈Shift〉、〈Ctrl〉和〈Alt〉键被按下,而三数的部分 和表示三个按钮部分地被同时按下。因此,可结合该参数 项来判断输入字母的大小写。
应 当 使 用 KeyDown 和 KeyUp 事 件 过 程 来 处 理 任 何 不 被 KeyPress识别的击键,诸如:功能键、编辑键、定位键以 及 任 何 这 些 键 和 键 盘 换 档 键 的 组 合 等 。 与 KeyDown 和 KeyUp事件不同的是,KeyPress不显示键盘的物理状态, 而只是传递一个字符。
KeyPreview 属性返回或设置一个值,以决定是否在控件 的键盘事件(KeyDown、KeyUp 和 KeyPress)之前激活 窗体的键盘事件。其语法为:
对象名.KeyPreview [= boolean]
其中,Boolean是布尔表达式,指定如何接收事件:当取 值为False(缺省值)时,活动控件接收键盘事件,而窗体 不接收;当取值为True时,窗体先接收键盘事件,然后是 活动控件接收事件。
表11-1 MousePointer属性值的描述
指针形状 值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 99
常数 vbDefault vbArrow vbCrosshair vbIbeam vbIconPointer vbSizePointer vbSizeNESW vbSizeNS vbSizeNWSE vbSizeWE vbUpArrow vbHourglass vbNoDrop vbArrowHourglass vbArrowQuestion vbSizeAll vbCustom
vb键盘鼠标事件
鼠标事件与键盘事件
鼠标事件
MouseMove 当鼠标指针移动到屏幕新位置时发生
MouseDown 按下任意鼠标键按钮时发生MouseUp释放任意鼠标键按钮时发生
MouseUp事件的语法格式 Sub 对象名_MouseUp(Button%,Shift%,X%,Y%)
Button参数是表示按下或松开鼠标哪个按钮 值 说明 1 左键被按下 2 右键被按下 4 中间按钮被按下
参数X, Y是鼠标指针的位置,通过 X 和 Y参数返回一个 指定鼠标指针当前位置的数,X和Y的值是使用该对象的坐 标系统表示鼠标指针当前位置。
键盘事件
KeyPress 按下对应某ASCII 字符的键。 KeyDown 按下键盘的任意键。 KeyUp 释放键盘的任意键只有获得焦点的对象
才能够接受键盘事件。
格式: Sub Object_KeyDown(KeyCode%, Shift As Integer) Sub Object_KeyUp(KeyCode%, Shift As Integer)
KeyPress 事件
在按下与ASCII字符对应的键时将触发KeyPress 事件。
Sub 对象名_KeyPress (KeyAscii As Integer)
KeyAscii 参数返回对应于ASCII字符代码的整型数 值。
KeyDown 和 KeyUp 事件
当一个对象具有焦点时按下(KeyDown) 或 松开 ( KeyUp ) 一个键时发生。
vb获取相对坐标
获取窗口相对坐标示例一:无论某窗口如何改变,单击窗体某相对位置实现:一窗体,两按钮,单击按钮一时,光标移动到按钮二上并单击(并非诸如call command2_click()之类);重点在于坐标转换。
'两CommamdButtonPrivate Declare Function GetWindowRect Lib "user32" _(ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As LongPrivate Type RECTleft As Longtop As Longright As Longbottom As LongEnd TypePrivate Type POINTx As Longy As LongEnd TypeConst MOUSEEVENTF_LEFTDOWN As Integer = &H2Const MOUSEEVENTF_LEFTUP As Integer = &H4Private Sub Command1_Click() '测试键Dim re As RECT, pt As POINT, x As Long, y As Long GetWindowRect Me.hwnd, re '获取窗口矩形信息x = re.left + (Command2.left + Command2.Width / 2) / Screen.TwipsPerPixelXy = re.top + (Command2.top + Me.Height - Me.ScaleHeight + Command2.Height / 2) / Screen.TwipsPerPixelY SetCursorPos x, y '移动光标至(x,y)mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0End Sub'目标按钮Private Sub Command2_Click()MsgBox "You have clicked me !"End Sub示例二:坐标三步转换,窗体上有图像框,图像框上有坐标系,显示鼠标在坐标系位置注:坐标系为数学常用坐标系,原点在左下角实现:获取光标位置,转换成窗体位置,转换成图像框位置,转换为坐标系位置。
噶米VB鼠标的左键拖动控件到窗体的任意位置
第十章 键盘与鼠标事件过程
Case 4 X$ = "按下Alt" Case 5 X$ = "按下Shift、Alt" Case 6 X$ = "按下Ctrl、Alt" Case 7 X$ = "按下Shift、Ctrl、Alt" End Select Label1.Caption = X + "-" + Str(KeyCode) + "-" + Chr(KeyCode) End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) Label1.Caption = "" End Sub
数值
描述
8
左上-右下尺寸线(指向东南和西北方向的 双箭头)
9
水平尺寸线(指向东和西两个方向的双箭头。
10
向上的箭头
11
沙漏(表示等待状态)
12
不允许放下(圈内一斜线,无法操作)
13
箭头和沙漏
14
箭头和问号
15
四向尺寸线
99
通过MouseIcon属性所指定的自定义图标
第十章 键盘与鼠标事件过程
默认情况下是0,由系统设置的默认值决定形状, 99时,鼠标指针的形状由MouseIcon属性设置鼠标指针 的形状,由用户自行设置。
…… End Sub X,Y:移动过程中,鼠标指针当前所在的位置;移 到那儿,X,Y指那儿
二级VB程序设计教程
第十章 键盘与鼠标事件过程
2、Shift Shift用于返回用户在按键时,是否按下shift、ctrl 或Alt键构成组合状态。
快速获取鼠标位置的方法
快速获取鼠标位置的方法获取鼠标位置是在计算机编程和用户界面设计中常见的需求。
无论是为了实现鼠标操作的交互功能,还是为了监测和记录鼠标的移动轨迹或点击位置,都需要能够快速准确地获取鼠标的当前位置。
本文将介绍一些常用的方法和技术,帮助开发者快速获取鼠标位置。
1.使用系统API在不同的编程语言和操作系统中,都提供了相应的API函数来获取鼠标位置。
例如,在Windows平台上,可以使用Win32 API的GetCursorPos函数来获取鼠标的屏幕坐标。
在MacOS平台上,可以使用Cocoa框架提供的NSEvent类的locationInWindow方法来获取鼠标的窗口坐标。
2.监听鼠标事件除了主动地获取鼠标位置,还可以通过监听鼠标事件来实时获取鼠标位置。
这种方法适用于需要实时追踪鼠标移动的场景。
通过注册系统提供的鼠标事件回调函数或者使用第三方库来监听鼠标事件,可以获取鼠标移动和点击的事件信息,从中提取出鼠标位置。
3.使用JavaScript获取鼠标位置在Web开发中,可以使用JavaScript来获取鼠标位置。
通过监听鼠标移动事件或者点击事件,可以使用event对象提供的clientX和clientY属性来获取鼠标相对于浏览器窗口的坐标。
如果需要获取鼠标相对于整个文档页面的坐标,则可以使用event对象的pageX和pageY 属性。
需要注意的是,不同浏览器可能会有差异,需要进行兼容性处理。
4.使用跨平台工具为了跨平台地获取鼠标位置,可以使用一些针对多个操作系统的跨平台工具。
这些工具一般是基于底层系统API实现的,提供了一致的接口和方法来获取鼠标位置。
例如,AutoHotkey是一个Windows平台上常用的跨平台工具,可以通过编写脚本来实现鼠标位置的获取。
5.使用第三方库和框架为了简化开发过程和提供更高级的功能,可以使用一些专门的第三方库和框架。
这些库和框架往往提供了更抽象和易用的接口,封装了底层的API调用。
vb 获取路径
vb 获取路径摘要:1.获取路径的意义2.VB 编程语言介绍3.VB 中获取路径的方法4.获取路径的实例演示5.总结正文:【1.获取路径的意义】在计算机编程中,获取路径是一项常见的操作。
路径指的是一个文件或文件夹在计算机中的具体存储位置。
获取路径可以帮助程序员在编写代码时准确地定位到某个文件或文件夹,以便对其进行读取、写入或删除等操作。
在VB 编程语言中,也有相应的函数可以实现获取路径的功能。
【2.VB 编程语言介绍】Visual Basic(简称VB)是一种由微软公司开发的编程语言,它具有简单易学、功能强大的特点,广泛应用于Windows 平台的应用程序开发。
VB 使用面向对象的编程方法,可以帮助程序员快速地构建出功能完善的软件。
【3.VB 中获取路径的方法】在VB 中,有多种方法可以获取路径。
以下列举了几种常用的方法:1) 使用“puter”对象```vbDim path As String =puter.FileSystem.SpecialDirectories("MyDocuments") ```2) 使用“My.Application”对象```vbDim path As String = .DirectoryPath```3) 使用“Path”函数```vbDim path As String = Path.GetTempPath()```【4.获取路径的实例演示】以下是一个简单的VB 程序,演示了如何获取"MyDocuments"文件夹的路径:```vbImports SystemModule Module1Sub Main()Dim path As String" 使用puter.FileSystem.SpecialDirectories 方法获取路径path =puter.FileSystem.SpecialDirectories("MyDocuments")Console.WriteLine("MyDocuments 路径:" & path)" 使用.DirectoryPath 方法获取路径path = .DirectoryPathConsole.WriteLine("应用程序路径:" & path)" 使用Path.GetTempPath() 方法获取路径path = Path.GetTempPath()Console.WriteLine("临时文件夹路径:" & path)Console.ReadKey()End SubEnd Module```【5.总结】通过以上介绍,我们可以看到,在VB 编程语言中,有多种方法可以获取路径。
VB操作鼠标的自定义类DIYMouse类
VB操作鼠标的自定义类DIYMouse类DIYMouse类一DIYMouse类(使用说明)1、属性CurrentX 指针当前坐标的X值CurrentY指针当前坐标的Y值2、方法PointGoto(x1, y1) 指针移动到屏幕位置LeftClick 单击左键RightClick 单击右键MiddleClick 单击中键DoubleClick 双击左键LeftDown 左键按下LeftUp 左键弹起RightDown 右键按下RightUp 右键弹起MiddleDown 中键按下MiddleUp 中键弹起3、示例Option ExplicitDim M As New DIYMousePrivate Sub Command1_Click()Timer1.Interval = 100Timer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer()Me.Caption = M.CurrentX & "," & M.CurrentY '在标题上显示鼠标当前位置End SubPrivate Sub Command2_Click()M.PointGoto 200, 300 '鼠标移动到屏幕坐标(200,300)位置(单位是像素) M.LeftClick '单击左键M.RightClick '单击右键M.MiddleClick '单击中键M.DoubleClick '双击左键M.LeftDown '按下左键(不松开)M.LeftUp '弹起左键(松开)'……省略,其余功能暂不一一列举End Sub二DIYMouse类(代码)Option Explicit'DIYMouse类'获取鼠标指针在屏幕上的坐标Private Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long'设置鼠标指针在屏幕上的坐标Private Declare Function SetCursorPos Lib "user32" (ByV al sPointX As Long, ByV al _sPointY As Long) As Long'鼠标事件Private Declare Sub mouse_event Lib "user32" (ByV al dwFlags As Long, ByV al dx _As Long, ByV al dy As Long, ByV al cButtons As Long, ByV al dwExtraInfo As Long)Private Const MouseEventF_LeftDown = &H2 '左键按下Private Const MouseEventF_LeftUp = &H4 '左键抬起Private Const MouseEventF_MiddleDown = &H20 '中键按下Private Const MouseEventF_MiddleUp = &H40 '中键抬起Private Const MouseEventF_Move = &H1 '鼠标移动Private Const MouseEventF_RightDown = &H8 '右键按下Private Const MOUSEEVENTF_RightUp = &H10 '右键抬起Private Const MouseEventF_ABSOLUTE = &H8000 'dx和dy 指定鼠标坐标系统中的一个绝对位置。
vb中键盘鼠标事件
第12章键盘与鼠标事件过程Visual Basic应用程序能够响应多种键盘事件和鼠标事件。
例如,窗体、图片框与图像控件都能检测鼠标指针的位置,并可判定其左、右键是否已经按下,还能响应鼠标按钮与Shift、Ctrl或Alt键的各种组合。
利用键盘事件可以编程响应多种键盘操作,也可以解释、处理ASCII字符。
Visual Basic应用程序还支持大多数控件及OLE的拖放功能,可用控件的Drag方法连同某些属性和事件宋实现控件的拖放操作。
OLE的拖放使应用程序的数据交换功能大大增强。
本章将对键盘和鼠标事件进行详细讲解,使读者掌握利用键盘和鼠标进行编程的基本技术。
12.1键盘事件键盘事件是用户与程序之间交互操作中的主要元素之—。
单击鼠标和按下按键都可以触发事件,而且还提供进行数据输入的手段以及在窗口和菜单中移动的基本形式。
键盘事件有三种,即KeyPress、KeyUp和KeyDown事件。
窗体和可接受键盘输入的控件(如文本框TextBox、命令按钮CommandButton、图片框PictureBox、组合框ComboBox 等)都可识别这些事件。
值得注意的是,只有获得焦点的对象才能够接受键盘事件。
对于窗体,只有成为活动窗体并且窗体中的任何控件均未获得焦点时,才会产生窗体的键盘事件。
窗体中任何控件已经获得焦点时,会产生控件的键盘事件。
12.1.1 KeyPress事件当用户按下键盘上的某个键时,将触发KeyPress事件。
该事件可以用于窗体和大部分标准控件,严格来说,当按下某个键时,所触发的是具有输入焦点(FOCUS)的那个控件的KeyPress事件。
在某一时刻,输入焦点只能位于某一个控件上,如果窗体上没有可见或有效的控件,则输入焦点位于窗体上。
当一个控件或窗体拥有输入焦点时,该控件或窗体将接受从键盘上输入的信息。
例如,假定一个文本框拥有输入焦点,则从键盘上输入的任何字符都将在该文本框上回显。
KeyPress事件过程的一般格式是:Private Sub对象名KeyPress(KeyAscii as Integer)事件过程End Sub如果接受KeyPress事件的对象为控件数组,对应的事件过程的格式为:Private Sub 对象名_KeyPress(Index as Integer,KeyAscii AS Integer)事件过程End Sub其中,“Index”是数组元素的下标。
vb获取相对坐标
获取窗口相对坐标示例一:无论某窗口如何改变,单击窗体某相对位置实现:一窗体,两按钮,单击按钮一时,光标移动到按钮二上并单击(并非诸如call command2_click()之类);重点在于坐标转换。
'两CommamdButtonPrivate Declare Function GetWindowRect Lib "user32" _(ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As LongPrivate Type RECTleft As Longtop As Longright As Longbottom As LongEnd TypePrivate Type POINTx As Longy As LongEnd TypeConst MOUSEEVENTF_LEFTDOWN As Integer = &H2Const MOUSEEVENTF_LEFTUP As Integer = &H4Private Sub Command1_Click() '测试键Dim re As RECT, pt As POINT, x As Long, y As Long GetWindowRect Me.hwnd, re '获取窗口矩形信息x = re.left + (Command2.left + Command2.Width / 2) / Screen.TwipsPerPixelXy = re.top + (Command2.top + Me.Height - Me.ScaleHeight + Command2.Height / 2) / Screen.TwipsPerPixelY SetCursorPos x, y '移动光标至(x,y)mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0End Sub'目标按钮Private Sub Command2_Click()MsgBox "You have clicked me !"End Sub示例二:坐标三步转换,窗体上有图像框,图像框上有坐标系,显示鼠标在坐标系位置注:坐标系为数学常用坐标系,原点在左下角实现:获取光标位置,转换成窗体位置,转换成图像框位置,转换为坐标系位置。
VB6中如何用MouseMove确定当前位置就是MSHFlexGrid表格的某列
VB6中如何用MouseMove确定当前位置就是
MSHFlexGrid表格的某列
VB6中如何用MouseMove确定当前位置就是MSHFlexGrid表格的某列
在VB6中,我用MSHFlexGrid控件在窗体上放了一个表格,现在想实现的功能是,当鼠标移动到该表格的某列时改变鼠标形状,离开该列时自动恢复鼠标形状。
在用MSHFlexGrid控件的MouseMove 事件时发现它定位鼠标位置的X、Y的度量单位与MSHFlexGrid控件的ColWidth属性的度量单位并非一致,需要换算。
要如何处理才能知道当前鼠标位置在该表格上的某列上呢?现将示例代码提供如下:Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim i As Integer
Dim j As Long
For i = 1 To MSFlexGrid1.Cols - 1
If x < MSFlexGrid1.ColPos(i) Then
Debug.Print "鼠标在第" & i & "列"
Exit Sub
End If
Next i
Debug.Print "鼠标在第" & i & "列"
End Sub
看看,还是比较简单吧!。
【转载】VBA对Word行、段落和光标位置的移动、选择和操作
【转载】VBA对Word⾏、段落和光标位置的移动、选择和操作在上看到的,VBA编程时要参考,特地转⼀下,另外由于嵌⼊到VBScript脚本中编程,对⼀些常量我给出了声明:Const wdCharacter = 1Const wdExtent = 1Const wdExtend = 1Const wdGoToBookmark = -1Const wdLine = 5Const wdCell = 12Const wdTableFormatSimple2 = 2Const wdAlignParagraphRight = 2Const wdYellow = 7Const wdToggle = 9999998Const wdAlignParagraphCenter = 1Const wdSentence = 3Const wdParagraph = 4Const wdStory = 6Const wdMove = 0下⾯我将的内容转帖(略作修改,主要是注释部分增加了VBScript的脚本写法):在WORD中⽤VBA宏语⾔选定⼀⾏、⼀段,删除⼀⾏、⼀段,移动光标⾄⾏⾸、⾏尾、段⾸、段尾等。
Sub MoveToCurrentLineStart()' 移动光标⾄当前⾏⾸' Selection.HomeKey wdLineSelection.HomeKey unit:=wdLineEnd SubSub MoveToCurrentLineEnd()' 移动光标⾄当前⾏尾' Selection.EndKey wdLineSelection.EndKey unit:=wdLineEnd SubSub SelectToCurrentLineStart()' 选择从光标⾄当前⾏⾸的内容' Selection.HomeKey wdLine, wdExtendSelection.HomeKey unit:=wdLine, Extend:=wdExtendEnd SubSub SelectToCurrentLineEnd()' 选择从光标⾄当前⾏尾的内容' Selection.EndKey wdLine, wdExtendSelection.EndKey unit:=wdLine, Extend:=wdExtendEnd SubSub SelectCurrentLine()' 选择当前⾏' Selection.HomeKey wdLine' Selection.EndKey wdLine, wdExtendSelection.HomeKey unit:=wdLineSelection.EndKey unit:=wdLine, Extend:=wdExtendEnd SubSub MoveToDocStart()' 移动光标⾄⽂档开始' Selection.HomeKey wdStorySelection.HomeKey unit:=wdStoryEnd SubSub MoveToDocEnd()' 移动光标⾄⽂档结尾' Selection.EndKey wdStorySelection.EndKey unit:=wdStoryEnd SubSub SelectToDocStart()' 选择从光标⾄⽂档开始的内容' Selection.HomeKey wdStory, wdExtendSelection.HomeKey unit:=wdStory, Extend:=wdExtendEnd SubSub SelectToDocEnd()' 选择从光标⾄⽂档结尾的内容' Selection.EndKey wdStory, wdExtendSelection.EndKey unit:=wdStory, Extend:=wdExtendEnd SubSub SelectDocAll()' 选择⽂档全部内容(从WholeStory可猜出Story应是当前⽂档的意思)Selection.WholeStoryEnd SubSub MoveToCurrentParagraphStart()' 移动光标⾄当前段落的开始' Selection.MoveUp wdParagraphSelection.MoveUp unit:=wdParagraphEnd SubSub MoveToCurrentParagraphEnd()' 移动光标⾄当前段落的结尾' Selection.MoveDown wdParagraphSelection.MoveDown unit:=wdParagraphEnd SubSub SelectToCurrentParagraphStart()' 选择从光标⾄当前段落开始的内容' Selection.MoveUp wdParagraph, wdExtendSelection.MoveUp unit:=wdParagraph, Extend:=wdExtendEnd SubSub SelectToCurrentParagraphEnd()' 选择从光标⾄当前段落结尾的内容' Selection.MoveDown wdParagraph, wdExtendSelection.MoveDown unit:=wdParagraph, Extend:=wdExtendEnd SubSub SelectCurrentParagraph()' 选择光标所在段落的内容' Selection.MoveUp wdParagraph' Selection.MoveDown wdParagraph, wdExtendSelection.MoveUp unit:=wdParagraphSelection.MoveDown unit:=wdParagraph, Extend:=wdExtendEnd SubSub DisplaySelectionStartAndEnd()'显⽰选择区的开始与结束的位置,注意:⽂档第1个字符的位置是0 MsgBox ("第" & Selection.Start & "个字符⾄第" & Selection.End & "个字符") End SubSub DeleteCurrentLine()' 删除当前⾏' Selection.HomeKey wdLine' Selection.EndKey wdLine, wdExtendSelection.HomeKey unit:=wdLineSelection.EndKey unit:=wdLine, Extend:=wdExtendSelection.DeleteEnd SubSub DeleteCurrentParagraph()' 删除当前段落' Selection.MoveUp wdParagraph' Selection.MoveDown wdParagraph, wdExtendSelection.MoveUp unit:=wdParagraphSelection.MoveDown unit:=wdParagraph, Extend:=wdExtendSelection.DeleteEnd Sub。