如何使鼠标不能移到窗体中的某个区域,比如窗体上有个按钮,我想当鼠标不能移到按钮上,应该怎么做

解决方案 »

  1.   

    不让点不行吗?
    Button.Enabled := False;或者在OnMouseMove中判断
      

  2.   

    用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;
      

  3.   

    是在按钮的onmousemove事件中写吗,好像不行啊,鼠标还是能移到按钮上啊
      

  4.   

    procedure Tform1.limitmouse(con:trect);
    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;
      

  5.   

    自己定义鼠标移动处理消息
    在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;
      

  6.   

    procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      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;
    -------------这样做怎么样?
      

  7.   

    当鼠标到达位置的时候隐藏起来就能满足楼主的想法了, heluqing(鉴之小河〖挣大钱娶美女〗) 得做法支持!
      

  8.   

    heluqing(鉴之小河〖挣大钱娶美女〗) 想法不错,如果能够不隐藏,如果鼠标到达该区域,那么立即把鼠标移到非该区域的其他地方就更好了
      

  9.   

    //参考如下代码:
    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;
      

  10.   

    heluqing(鉴之小河〖挣大钱娶美女〗)的做法,虽然鼠标移到按钮上面之后看不到了,但如果在按钮上双击的话,按钮会不断的闪动!不知道什么原因,我把onmousedown,onmouseup只要和鼠标有关的,我都加了(Sender as Tbutton).Visible:=False;但,还是闪动,不知道是为什么?
      

  11.   

    太麻烦了,Enabled := False得了
      

  12.   

    dongycumt(阡陌) 闪动的问题我刚才又看了看,果然是有!那就把
    (Sender as Tbutton).Visible:=False;改成
    (Sender as Tbutton).Enable:=False;吧
    ////关键不知道搂住要这个代码是干什么用的
    其实可以设置一个全局变量(例如:CanClick:boolean)来决定用户是否被允许Click按钮
    在OnMouseMove的时候就可以判断CanClick,如果False,就执行上面的代码
    如果CanClick=True;就什么都不作就可以了....