给各vb地,你自己翻译成delphi的吧: Private Declare Function ClipCursor Lib ″user32″ (lpRect As Any) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type //以上代码请从API函数浏览器中复制即可。 Dim DENG As RECT Dim SS As Boolean //是锁定或是释放的判断 ------------ Private Sub Form_Load() //作初始化设置。 SS = True Command1.Caption = ″单击将锁定鼠标,锁定后按回车将被释放″。 Command2.Caption = ″结束程序″ Form1.Caption = ″锁定鼠标的演示程序″ End Sub ----------- Private Sub Command1_Click() //锁定鼠标 If SS = True Then //如果鼠标没有被锁定则锁定它。 DENG.Left = 0:DENG.Top = 0 //必要设置,四个都为零。 DENG.Right = 0:DENG.Bottom = 0 ClipCursor DENG : SS = False //锁定鼠标且重新赋值给SS。 Else ClipCursor ByVal 0& : SS = True //释放鼠标且重新赋值给SS End If End Sub ----------- Private Sub Command2_Click() End //结束程序。 End Sub 单击COMMAND1鼠标将被锁定,锁定后要释放请按下回车键即可。
var Form1: TForm1; myrect: pRECT; lock: Boolean;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject); begin lock:= True; button1.Caption:= '单击将锁定鼠标,锁定后按回车将被释放'; Form1.Caption:= '锁定鼠标的演示程序'; end;procedure TForm1.Button1Click(Sender: TObject); begin If lock= True Then //如果鼠标没有被锁定则锁定它。 begin new(myrect); myrect.Left := 0; myrect.Top := 0; //必要设置,四个都为零。 myrect.Right := 0; myrect.Bottom:= 0; ClipCursor(myrect); lock:= False; //锁定鼠标且重新赋值给lock。 end Else begin ClipCursor(nil); lock:= True; end; end;
这句话可以实现: Var temp:integer; SystemParametersInfo(Spi_screensaverrunning,1,@temp,0); 这句话解除: Var temp:integer; SystemParametersInfo(spi_screensaverrunning,0,@temp,0);或者 function My_CurLock(ileft, itop, iright, idown: integer): Boolean; var aRect: TRect; begin aRect := Rect(ileft, itop, iright, idown); Result := ClipCursor(@aRect); end; 先取得当前位置 VAR P:TPOINT; BEGIN GETCURSORPOS(P); POP1.POPOP(P.X,P.Y); END; function My_CurUNLock: Boolean; begin Result := ClipCursor(nil); end;
to : manmanchong 为什么必须设为0 ?设成别的确实不行为什么? 我按下回车或者esc就不锁鼠标了,为什么?
Private Declare Function ClipCursor Lib ″user32″ (lpRect As Any) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type //以上代码请从API函数浏览器中复制即可。
Dim DENG As RECT
Dim SS As Boolean //是锁定或是释放的判断
------------
Private Sub Form_Load() //作初始化设置。
SS = True
Command1.Caption = ″单击将锁定鼠标,锁定后按回车将被释放″。
Command2.Caption = ″结束程序″
Form1.Caption = ″锁定鼠标的演示程序″
End Sub
-----------
Private Sub Command1_Click() //锁定鼠标
If SS = True Then //如果鼠标没有被锁定则锁定它。
DENG.Left = 0:DENG.Top = 0 //必要设置,四个都为零。
DENG.Right = 0:DENG.Bottom = 0
ClipCursor DENG : SS = False //锁定鼠标且重新赋值给SS。
Else
ClipCursor ByVal 0& : SS = True //释放鼠标且重新赋值给SS
End If
End Sub
-----------
Private Sub Command2_Click()
End //结束程序。
End Sub
单击COMMAND1鼠标将被锁定,锁定后要释放请按下回车键即可。
Form1: TForm1;
myrect: pRECT;
lock: Boolean;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
begin
lock:= True;
button1.Caption:= '单击将锁定鼠标,锁定后按回车将被释放';
Form1.Caption:= '锁定鼠标的演示程序';
end;procedure TForm1.Button1Click(Sender: TObject);
begin
If lock= True Then //如果鼠标没有被锁定则锁定它。
begin
new(myrect);
myrect.Left := 0;
myrect.Top := 0; //必要设置,四个都为零。
myrect.Right := 0;
myrect.Bottom:= 0;
ClipCursor(myrect);
lock:= False; //锁定鼠标且重新赋值给lock。
end
Else
begin
ClipCursor(nil);
lock:= True;
end;
end;
在Form中放置二个 Button, 然後分别为这两个按钮定义OnClick响应事件如下:
// 开始
procedure TForm1.Button1Click(Sender: TObject);
var
btButton2: TRect;
begin
btButton2 := Button2.BoundsRect;
MapWindowPoints(handle, 0, btButton2, 2); // 座标换算
ClipCursor(@btButton2); // 限制鼠标移动区域
end;// 还原
procedure TForm1.Button2Click(Sender: TObject);
var
btScreen: TRect;
begin
btScreen := Rect(0, 0, Screen.Width, Screen.Height);
ClipCursor(@btScreen);
end;
Var
temp:integer;
SystemParametersInfo(Spi_screensaverrunning,1,@temp,0);
这句话解除:
Var
temp:integer;
SystemParametersInfo(spi_screensaverrunning,0,@temp,0);或者
function My_CurLock(ileft, itop, iright, idown: integer): Boolean;
var
aRect: TRect;
begin
aRect := Rect(ileft, itop, iright, idown);
Result := ClipCursor(@aRect);
end;
先取得当前位置
VAR P:TPOINT;
BEGIN
GETCURSORPOS(P);
POP1.POPOP(P.X,P.Y);
END;
function My_CurUNLock: Boolean;
begin
Result := ClipCursor(nil);
end;
为什么必须设为0
?设成别的确实不行为什么?
我按下回车或者esc就不锁鼠标了,为什么?