发信人: 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
                          
                                              | 
 
 
 |