Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2014/7/19 0:13:43
delphi限制鼠标移动的范围

delphi限制鼠标移动的范围

限制鼠标移动的范围

有时为了操作方便,需要将鼠标的移动范围限制在一定区域内。本实例的窗体中有两个按钮,当单击第1 个按钮后,鼠标被限制在第2 个按钮上移动;当单击第2 个按钮后,鼠标可以在屏幕上自由移动。

函数ClipCursor 可以限定鼠标活动区域。该函数原型如下:

BOOL ClipCursor( CONST RECT *lpRect ) ;

其中参数RECT 为指向一个矩形区域的指针,坐标为屏幕坐标。如果设置为0,则鼠标可以在整个屏幕中自由移动。

因为ClipCursor 需要屏幕坐标作为参数,所以通过调用函数MapWindowPoints 将点相对坐标转换为屏幕坐标。该函数原型如下:

int MapWindowPoints(

HWND hWndFrom, // handle of window to be mapped from

HWND hWndTo, // handle of window to be mapped to

LPPOINT lpPoints, // address of structure array with points to map

UINT cPoints // number of structures in array

);

其中的4 个参数含义如下。

• hWndFrom:转换前作为坐标原点的窗体,如果为NULL 或HWND_DESKTOP 则表示屏幕。

• hWndTo:转换后作为坐标原点的窗体,如果为NULL 或HWND_DESKTOP 则表示屏幕。

• lpPoints:存储需要转换的点的数组地址。

• cPoints:需要转换的点的个数。

下面使用一个示例来说明如何限制鼠标移动位置。

(1)创建一个新的Delphi 项目,给窗体Form1 添加两个Button 组件,Caption 属性分别设定为“将鼠标限定在下面的按钮中移动”和“取消鼠标移动范围的限定”,按钮的名称保留默认值。

(2)响应“将鼠标限定在下面的按钮中移动”按钮的单击事件,代码如下:

//单击“将鼠标限定在下面的按钮中移动”限制鼠标移动范围

procedure TForm1.Button1Click(Sender: TObject);

var

rtButton2: TRect;

begin

//获取Button2 的坐标

rtButton2 := Button2.BoundsRect;

//将坐标转换为屏幕坐标

MapWindowPoints(handle, 0, rtButton2, 2);

//将鼠标移动的范围限制在Button2 按钮上

ClipCursor( @rtButton2 );

end ;

(3)响应“取消鼠标移动范围的限定”按钮的单击事件,代码如下:

//单击“取消鼠标移动范围的限定”按钮取消限制

procedure TForm1.Button2Click(Sender: TObject);

begin

//取消鼠标移动范围的限制

ClipCursor( 0 );

end;




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759