打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
如何捕捉屏幕鼠标位置
独孤求财
>《DELPHI》
2012.02.23
关注
如何捕捉屏幕鼠标位置
韩世伟
在windows 95/98屏幕上经常出现同时存在几个程序窗口的情况,由于屏幕不是针对某一个程序的,因此,捕捉鼠标当前的位置就是一个令人头痛的问题。delphi的窗体form提供了一个on-mousemove事件,但是它只能捕捉程序窗口内的鼠标位置,而对于窗口外的位置无法捕捉。其实我们只要使用delphi提供的全局变量mouse,就可以方便地得知鼠标在屏幕的任意位置。
为能及时反映出鼠标的当前位置,我们在form中添加两个label控件来显示当前鼠标的位置和一个timer控件,并将timer控件的interval属性置为100,即每0.1秒检测一次,在其ontimer事件中添加如下代码:
procedure tform1.timer1timer(sender: tobject);
begin
label1.caption:=′x=′+inttostr(mouse.cursorpos.x);
label2.caption:=′y=′+inttostr(mouse.cursorpos.y);
label1.refresh;
label2.refresh;
end;
按f9运行程序后,当在屏幕上移动鼠标时,无论鼠标是否在当前的程序窗口内,mouse变量都能确定当前鼠标光标的位置并显示出来。
mouse变量提供的是全屏的鼠标位置,如果仅需要程序窗体内的鼠标位置,也可以使用窗体form的onmousemove事件来捕捉鼠标位置。在窗体再增加两个label控件,并在form的onmousemove事件中添加如下代码:
procedure tform1.formmousemove(sender: tobject; shift: tshiftstate; x, y: integer);
begin
label3.caption:=′x=′+inttostr(x);
label4.caption:=′y=′+inttostr(y);
label3.refresh;
label4.refresh;
end;
按f9运行程序后,结果如图1所示。
图1
当我们移动鼠标时,会发现label3和label4显示的鼠标位置与mouse变量提供的鼠标位置并不相同。mouse变量提供的鼠标位置是绝对坐标,它的鼠标位置是相对于屏幕左上角的位置,而窗体的onmousemove事件提供的鼠标位置则是相对于应用程序窗体的相对坐标,它与mouse变量提供的鼠标位置存在着如下的关系:
x:=mouse.x-form1.left-窗体边框宽度
y:=mouse.y-form1.top-窗体的标题条宽度
其中应用程序窗体的边框宽度与标题条宽度与程序的设定有关。
除了数值上不相同外,利用on-mousemove事件捕捉的鼠标存在如下缺陷:
1.对于鼠标光标处于应用程序窗体之外的情况无法捕捉;
2.对于移动到窗体控件上的鼠标光标无法捕捉其位置。
但是,如果读者仅捕捉程序窗口内的鼠标位置,使用onmousemove事件还是很方便的,因为它不需要再进行绝对坐标与相对坐标的转换,而这种转换却是相当麻烦的,读者可以根据程序的需要灵活地使用这两种手段。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
Delphi制作移动文字、图片
Delphi 7 中的随机函数
奇迹重现 Delphi 2005赏析-3
用Delphi做一个组件探测器:WidgetSpy
巧用Visual Basic的TIMER控件
VB6.0初学者的十个编程小技巧
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×