发信人: delfan( )
整理人: teleme(2001-04-18 08:39:35), 站内信件
|
前一阵有个网友提的问题,好象一直都没有解决。今天翻看API的时候,看到SetCapTure,想起这个问题。在此先和那位网友说声对不起。
窗体上放置一个button,一个edit,代码如下,注意每次取之前都要先点一下button.
原理见程序中注释。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
setcapture(handle); // 设置捕获鼠标输入
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var point : TPoint;
hwnd : THandle;
begin
point.x := x;
point.y := y;
point := ClientToScreen(point); // 客户区坐标转换到屏幕坐标
hwnd := WindowFromPoint(point); // 取鼠标点击的窗体句柄
ReleaseCapture; // 终止捕获鼠标输入
if hwnd=handle then edit1.text := '没有点击其他窗体!'
else
edit1.Text := inttostr(hwnd);
end;
end.
---- o
O
/-----||---\
/------------\ 不是俺家......
| ___ 日 |
|_|_|______| VvVvVv
|
|