procedure TForm1.Formshow(Sender: TObject);var
rt: TRect;
begin
rt:= panel1.BoundsRect;
MapWindowPoints(handle, 0, rt, 2);
// 座标换算
ClipCursor(@rt);
// 限制鼠标移动区域
end;如果写成MapWindowPoints(handle, 0, rt, 3);则可限制鼠标,但运行时会跳出一个消息窗口说有有错误,不过可运行.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    rtButton2: TRect;
    begin
      rtButton2 := Bevel1.BoundsRect;
      MapWindowPoints(handle, 0, rtButton2, 2); 
      ClipCursor(@rtButton2);   
    end;
      

  2.   

    不知为什么,你的代码放在FormShow中不行,放在Button1Click中可以如果找不到原因,建议在FormShow中用PostMessage给自己发一条消息,
    然后再消息处理中执行你的代码
      

  3.   

    你去看看msdn的帮助吧,rt是个数组,只有两个元素,后边的参数哪来的3呢?
    我说的也不一定准确,去看看吧
      

  4.   

    TPoint rt;rt是TPoint类型的,只有x,y两个值
      

  5.   

    问题是当我用的是2的时候,不可限制,用的3,反而可以,所以奇怪.不过会跳个错误窗口罢了刚才改了一下,放在TForm1.FormActivate中,可限制,可为何在SHOW和CREATE中不可控制..奇怪
      

  6.   

    plainsong(伤心的风) 是用的clipcousor啊
      

  7.   

    int MapWindowPoints(
      HWND hWndFrom,     // handle to source window
      HWND hWndTo,       // handle to destination window
      LPPOINT lpPoints,  // array of points to map
      UINT cPoints       // number of points in array
    );
    lpPoints 
    [in/out] Pointer to an array of POINT structures that contain the set of points to be converted. The points are in device units. This parameter can also point to a RECT structure, in which case the cPoints parameter should be set to 2.最后一句看看