程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 制作類似WinAmp一樣的“磁性”窗口

制作類似WinAmp一樣的“磁性”窗口

編輯:Delphi
Winamp的用戶都知道,Winamp的播放列表或均衡器在被移動的時候,仿佛會受到一股磁力,每當靠近主窗口時就一下子被“吸附”過去,自動沿邊對齊。我想讓我的Winamp插件也具備這種奇妙特性,於是琢磨出了一

種“磁化”窗口的方法。該法適用於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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved