关于在控件内锁定鼠标的移动范围的问题,请教.(100分)

  • 主题发起人 主题发起人 swgbq
  • 开始时间 开始时间
S

swgbq

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己做一个控件,从TCustomControl继承,在鼠标消息内,我想在鼠标按下时将鼠标锁定在控件的区域之内,我用如下处理,在OnMouseDown下写:
R := ClientRect;
ClipCursor(@R);
可是,在执行程序时,并不是锁定的控件的区域,而是有偏移,这是为何啊.
 
rmouse:=panel4.BoundsRect;
MapWindowPoints(handle, 0, rmouse, 2);
ClipCursor(@rmouse);
将鼠标锁定在panel4中。
 
楼上的哥们,我指的是在自己写的控件内部,即自己写的程序,然后需要在delphi内进行注册.
TGISCustomDraw = class(TCustomControl)
private
procedure WMLButtonDown(var msg: TWMLButtonDown); message WM_LBUTTONDOWN;
end;

procedure TGISCustomDraw.WMLButtonDown(var msg: TWMLButtonDown);
var
X, Y: LongInt;
begin
inherited;

if FLoading then
Exit;
x := msg.XPos;
y := msg.YPos;
FDownPoint := Point(X, Y);
FOldPoint := FDownPoint;
if (FLoading) or (FMapTool = mtNone) then
begin
Exit;
end;
if (FMapTool = mtPan) then
begin
Cursor := crPaning;
Perform(WM_LBUTTONUP, 0, MakeLParam(X, Y));
end;
FMapMove := True;
FMoveBeginPos := ScreenToWorld(FDownPoint);
FMoveOldPos := FMoveBeginPos;
R := ClientRect;
ClipCursor(@R);//在此处鼠标锁定的不是我想指定的控件的范围,而是从屏幕的左上角开始锁定了.
end;
 
老兄你的每一等是什么意思啊.
 
后退
顶部