種“磁化”窗口的方法。該法適用於Delphi的各個版本。為了演示這種技術,請隨我來制作一個會被Winamp“吸引”的樣板程序。
先新建一應用程序項目,把主窗口Form1適當改小些,並將BorderStyle設為bsNone。放一個按鈕元件,雙擊它並在onClick事件中寫“Close;”。待會兒就按它來結束程序。現在切換到代碼編輯區,定義幾個全局變量。
var
Form1: TForm1; //“磁性”窗口
LastX, LastY: Integer; //記錄前一次的坐標
WinampRect:TRect; //保存Winamp窗口的矩形區域
hwnd_Winamp:HWND; //Winamp窗口的控制句柄
接著編寫Form1的onMouseDown和onMouseMove事件。
procedure TForm1.FormMouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
ClassName=‘Winamp v1.x’; //Winamp主窗口的類名
//如果改成ClassName=‘TAppBuilder’,你就會發現連Delphi也有引力啦!
begin
//記錄當前坐標
LastX := X;
LastY := Y;
//查找Winamp
hwnd_Winamp := FindWindow(ClassName,nil);
if hwnd_Winamp>0 then //找到的話,記錄其窗口區域
GetWindowRect(hwnd_Winamp, WinampRect);
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift:
TShiftState; X,
Y: Integer);
var
nLeft,nTop:integer; //記錄新位置的臨時變量
begin
//檢查鼠標左鍵是否按下
if HiWord(GetAsyncKeyState(VK_LBUTTON)) > 0 then
begin
//計算新坐標
nleft := Left + X - LastX;
nTop := Top + Y - LastY;
//如果找到Winamp,就修正以上坐標,產生“磁化”效果
if hwnd_Winamp>0 then