//参考如下代码: uses Math;procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var vCursorPos: TPoint; vOffsetPos: TPoint; begin vCursorPos := Mouse.CursorPos; with TControl(Sender) do begin vOffsetPos := Self.ClientToScreen(BoundsRect.TopLeft); if Abs(vOffsetPos.X - vCursorPos.X) <= 5 then vCursorPos.X := Min(vCursorPos.X, vOffsetPos.X - 1) else if Abs(vOffsetPos.Y - vCursorPos.Y) <= 5 then vCursorPos.Y := Min(vCursorPos.Y, vOffsetPos.Y - 1) else begin vOffsetPos := Self.ClientToScreen(BoundsRect.BottomRight); if Abs(vOffsetPos.X - vCursorPos.X) <= 5 then vCursorPos.X := Max(vCursorPos.X, vOffsetPos.X + 1) else vCursorPos.Y := Max(vCursorPos.Y, vOffsetPos.Y + 1); end; end; Mouse.CursorPos := vCursorPos; end;
heluqing(鉴之小河〖挣大钱娶美女〗)的做法,虽然鼠标移到按钮上面之后看不到了,但如果在按钮上双击的话,按钮会不断的闪动!不知道什么原因,我把onmousedown,onmouseup只要和鼠标有关的,我都加了(Sender as Tbutton).Visible:=False;但,还是闪动,不知道是为什么?
太麻烦了,Enabled := False得了
dongycumt(阡陌) 闪动的问题我刚才又看了看,果然是有!那就把 (Sender as Tbutton).Visible:=False;改成 (Sender as Tbutton).Enable:=False;吧 ////关键不知道搂住要这个代码是干什么用的 其实可以设置一个全局变量(例如:CanClick:boolean)来决定用户是否被允许Click按钮 在OnMouseMove的时候就可以判断CanClick,如果False,就执行上面的代码 如果CanClick=True;就什么都不作就可以了....
Button.Enabled := False;或者在OnMouseMove中判断
if (x>0) and (x<(Sender as TButton).Width) and (Y>0) and (Y<(Sender as TButton).Height) then
begin
x:=0;
Y:=0;
end;
begin
ClipCursor(@con); // 限制鼠标移动区域
end;procedure Tform1.releasemouse;
var
rtScreen: TRect;
begin
rtScreen := Rect(0, 0, Screen.Width, Screen.Height);
ClipCursor(@rtScreen);
end;procedure TForm1.FormActivate(Sender: TObject);
var
con:trect;
begin
con:=form1.BoundsRect;
con.Left:=left;
con.Top:=top;
limitmouse(con); //限制鼠标
end;
在form1
private
procedure TWMMouse(var Msg:TMessage); message WM_MOUSEMOVE;procedure TForm1.TWMMouse(var Msg:TMessage);
var
MoveRect:TRect;
begin
MoveRect.Left:=100;
MoveRect.Top:=50;
MoveRect.Right:=200;
MoveRect.Bottom:=200; //自己定义可以移动的区域 MapWindowPoints(Handle,0,MoveRect,2); //计算鼠标位置
ClipCursor(@moverect); //锁定鼠标
end;
Y: Integer);
begin
//showmessage('我藏起来了,你看不到我!');
(Sender as Tbutton).Visible:=False;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
button1.Visible:=True;
end;
-------------这样做怎么样?
uses Math;procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
vCursorPos: TPoint;
vOffsetPos: TPoint;
begin
vCursorPos := Mouse.CursorPos;
with TControl(Sender) do
begin
vOffsetPos := Self.ClientToScreen(BoundsRect.TopLeft);
if Abs(vOffsetPos.X - vCursorPos.X) <= 5 then
vCursorPos.X := Min(vCursorPos.X, vOffsetPos.X - 1)
else if Abs(vOffsetPos.Y - vCursorPos.Y) <= 5 then
vCursorPos.Y := Min(vCursorPos.Y, vOffsetPos.Y - 1)
else begin
vOffsetPos := Self.ClientToScreen(BoundsRect.BottomRight);
if Abs(vOffsetPos.X - vCursorPos.X) <= 5 then
vCursorPos.X := Max(vCursorPos.X, vOffsetPos.X + 1)
else vCursorPos.Y := Max(vCursorPos.Y, vOffsetPos.Y + 1);
end;
end;
Mouse.CursorPos := vCursorPos;
end;
(Sender as Tbutton).Visible:=False;改成
(Sender as Tbutton).Enable:=False;吧
////关键不知道搂住要这个代码是干什么用的
其实可以设置一个全局变量(例如:CanClick:boolean)来决定用户是否被允许Click按钮
在OnMouseMove的时候就可以判断CanClick,如果False,就执行上面的代码
如果CanClick=True;就什么都不作就可以了....