procedure TForm1.Button1Click(Sender: TObject);
var
R: TRect;
begin
R := Memo1.ClientRect;
R.TopLeft := Memo1.ClientToScreen(R.TopLeft);
R.BottomRight := Memo1.ClientToScreen(R.BottomRight);
ClipCursor(@R);
end;
上面的代码很清楚,就是把鼠标锁定在Memo1中,点击Button1后鼠标锁定在Memo1中,可是再一次点击鼠标的时候锁定就解除了,可是再一次点击鼠标的时候没有调用ClipCursor(nil)啊,各位大虾,为什么能解除呢?例子很简单,就用到了一个TMemo和TButton控件
var
R: TRect;
begin
R := Memo1.ClientRect;
R.TopLeft := Memo1.ClientToScreen(R.TopLeft);
R.BottomRight := Memo1.ClientToScreen(R.BottomRight);
ClipCursor(@R);
end;
上面的代码很清楚,就是把鼠标锁定在Memo1中,点击Button1后鼠标锁定在Memo1中,可是再一次点击鼠标的时候锁定就解除了,可是再一次点击鼠标的时候没有调用ClipCursor(nil)啊,各位大虾,为什么能解除呢?例子很简单,就用到了一个TMemo和TButton控件
procedure TForm1.Button1Click(Sender: TObject);
var
R: TRect;
begin
Memo1.Setfocus;
R := Memo1.ClientRect;
R.TopLeft := Memo1.ClientToScreen(R.TopLeft);
R.BottomRight := Memo1.ClientToScreen(R.BottomRight);
ClipCursor(@R);
end;
如果有其他信息弹出窗口,Form失去焦点后,这样的控制就失效了,比如有什么ShowMessage,messagebox等弹出窗口的东西都不行。
还是没有解决我的问题,我想问的其实是除了调用ClipCursor(nil)解除锁定外,还有那些可以解除,除了调用ClipCursor(nil)解除锁定外的这些方法为什么能解除?就像我上面说的那个例子,鼠标点击也能解除,这是为什么?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AppEvnts;type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Memo1Enter(Sender: TObject);
procedure Memo1Exit(Sender: TObject);
private
public
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Memo1Enter(Sender: TObject);
var
ClipPanel: TRect;
begin
ClipPanel := Memo1.BoundsRect;
MapWindowPoints(handle, 0, ClipPanel, 2);
ClipCursor(@ClipPanel);
end;procedure TForm1.Memo1Exit(Sender: TObject);
begin
ClipCursor(nil)
end;end.
在一定程度上可以实现你的要求