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控件

解决方案 »

  1.   

    不是吧,就加一个一个TMemo和TButton控件,在TButton的onclick事件中加入上面代码啊
      

  2.   

    首先应将焦点转到Memo上,这样试试
    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等弹出窗口的东西都不行。
      

  3.   

    楼上的,你的这个更惨啊,连鼠标都锁不定
    还是没有解决我的问题,我想问的其实是除了调用ClipCursor(nil)解除锁定外,还有那些可以解除,除了调用ClipCursor(nil)解除锁定外的这些方法为什么能解除?就像我上面说的那个例子,鼠标点击也能解除,这是为什么?
      

  4.   

    一定是焦点的影响,也许当焦点从memo外进入会导致,corsor解除锁定
      

  5.   

    unit Unit1;interfaceuses
      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.
    在一定程度上可以实现你的要求