打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何捕捉屏幕鼠标位置
如何捕捉屏幕鼠标位置

韩世伟

  在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功能使用有故障,
可点击这里联系客服!

联系客服