程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 實現QQ窗體的縮入伸出功能

實現QQ窗體的縮入伸出功能

編輯:Delphi

  不知道大家在使用QQ時有沒有想到它的縮入伸出的功能是如何實現的呢?實現這個效果的關鍵在於如何判斷當前鼠標指針下面的窗體是不是我們的程序窗體。GetCursorPos()是一個可以獲得鼠標指針在屏幕中的坐標的API函數,利用它與FindVCLWindow()的結合就可以輕易地獲得鼠標指針下的VCL可視組件,但當一個窗體中不只一個VCL可視組件,例如可能還有TPanel、TMemo等等類型時,那麼我們就必須要查找到它們的Parent級,最終得到TForm,那就是指我們的程序窗體。按照這個思路我自定義了GetFormNameAt()函數,它可獲得當前鼠標指針下面的窗體的名稱。以下列出程序的主要實現代碼,供大家參考:(由書生整理,Win2000+Delphi測試通過)
  

  //自定義函數GetFormNameAt,獲得鼠標針指下窗體的Name
  function GetFormNameAt ( X, Y : integer ) : string;
  var
     P:TPoint;
     W:TWinControl;
  begin
     P.X := X;
     P.Y := Y;
     W := FindVCLWindow(P); //得到鼠標指針下的VCL可視組件
     if ( nil <> W ) then
     begin
        while w.Parent<>nil do //當W的上級Parent不為空時就繼續往上找
          w:=w.Parent;
        Result := W.Name;//最後返回窗體的名稱Name
     end
     else
     begin
      Result := ’’;
     end;
  end;

  procedure TForm1.Timer1Timer(Sender: TObject);
  var
     winPos:TPoint;
  begin
  if (form1.Top<=3) or (form1.Left>=screen.Width-form1.Width-3) then //判斷
  begin
     GetCursorPos(winpos);  //得到當前鼠標指針的在屏幕上的坐標

     //當鼠標指針下的窗體的Name等於form1.name時
     if form1.name=GetFormNameAt(winpos.X,winpos.Y) then
     {在此我們可以為form1取一個特別的名稱,以防有別的窗體名稱與它相同}
     begin
      form1.Timer2.Enabled:=false; //停用Timer2
      form1.Top:=0;  //form1的Top與屏幕對齊
     end
     else
      form1.Timer2.Enabled:=true; //開啟Timer2
  end;
  end;
  procedure TForm1.Timer2Timer(Sender: TObject);
  begin
     if form1.Top<=20 then
        form1.Top:=-(form1.Height-10);//將form1向上移,在屏幕上方露出10像素
  end;

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