请问如何实现象QQ那样自动隐藏窗体?鼠标感应窗体出现?

解决方案 »

  1.   

    搂住的想法应该是自动挂靠,这样的控件应该有很多啊,可以到delphi技术站点搜索一下
      

  2.   

    给你一个例子:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Timer2: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure Timer2Timer(Sender: TObject);
      private
        function GetFormNameAt ( X, Y : integer ) : string;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }//×Ô¶¨Ò庯ÊýGetFormNameAt£¬»ñµÃÊó±êÕëָϴ°ÌåµÄName
    function TForm1.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 //&micro;±W&micro;&Auml;&Eacute;&Iuml;&frac14;&para;Parent&sup2;&raquo;&Icirc;&ordf;&iquest;&Otilde;&Ecirc;±&frac34;&Iacute;&frac14;&Igrave;&ETH;&oslash;&Iacute;ù&Eacute;&Iuml;&Otilde;&Ograve;
            w:=w.Parent;
          Result := W.Name;//×&icirc;&ordm;ó·&micro;&raquo;&Oslash;&acute;°&Igrave;&aring;&micro;&Auml;&Atilde;&ucirc;&sup3;&AElig;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) or (form1.Left<=3) then //&Aring;&ETH;”à
      begin
         GetCursorPos(winpos);  //&micro;&Atilde;&micro;&frac12;&micro;±&Ccedil;°&Ecirc;ó±ê&Ouml;&cedil;&Otilde;&euml;&micro;&Auml;&Ocirc;&Uacute;&AElig;&Aacute;&Auml;&raquo;&Eacute;&Iuml;&micro;&Auml;×&oslash;±ê     //&micro;±&Ecirc;ó±ê&Ouml;&cedil;&Otilde;&euml;&Iuml;&Acirc;&micro;&Auml;&acute;°&Igrave;&aring;&micro;&Auml;Name&micro;&Egrave;&Oacute;&Uacute;form1.name&Ecirc;±
         if form1.name=GetFormNameAt(winpos.X,winpos.Y) then
         {&Ocirc;&Uacute;&acute;&Euml;&Icirc;&Ograve;&Atilde;&Ccedil;&iquest;&Eacute;&Ograve;&Ocirc;&Icirc;&ordf;form1&Egrave;&iexcl;&Ograve;&raquo;&cedil;&ouml;&Igrave;&Oslash;±&eth;&micro;&Auml;&Atilde;&ucirc;&sup3;&AElig;&pound;&not;&Ograve;&Ocirc;·&Agrave;&Oacute;&ETH;±&eth;&micro;&Auml;&acute;°&Igrave;&aring;&Atilde;&ucirc;&sup3;&AElig;&Oacute;&euml;&Euml;ü&Iuml;à&Iacute;&not;}
         begin
          form1.Timer2.Enabled:=false; //&Iacute;&pound;&Oacute;&Atilde;Timer2
          form1.Top:=0;  //form1&micro;&Auml;Top&Oacute;&euml;&AElig;&Aacute;&Auml;&raquo;&para;&Ocirc;&AElig;&euml;
         end
         else
          form1.Timer2.Enabled:=true; //&iquest;&ordf;&AElig;&ocirc;Timer2
      end;
    end;procedure TForm1.Timer2Timer(Sender: TObject);
    begin
     if form1.Top<=20 then
        form1.Top:=-(form1.Height-5);//&frac12;&laquo;form1&Iuml;ò&Eacute;&Iuml;&Ograve;&AElig;&pound;&not;&Ocirc;&Uacute;&AElig;&Aacute;&Auml;&raquo;&Eacute;&Iuml;·&frac12;&Acirc;&para;&sup3;&ouml;5&Iuml;&ntilde;&Euml;&Oslash;
    end;
    end.
      

  3.   

    再来一次:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Timer2: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure Timer2Timer(Sender: TObject);
      private
        function GetFormNameAt ( X, Y : integer ) : string;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.GetFormNameAt(X, Y: integer): string;
    var
       P:TPoint;
       W:TWinControl;
    begin
       P.X := X;
       P.Y := Y;
       W := FindVCLWindow(P);
       if ( nil <> W ) then
       begin
          while w.Parent<>nil do
            w:=w.Parent;
          Result := W.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) or (form1.Left<=3) then
      begin
         GetCursorPos(winpos);
         if form1.name=GetFormNameAt(winpos.X,winpos.Y) then     begin
          form1.Timer2.Enabled:=false;
          form1.Top:=0;
         end
         else
          form1.Timer2.Enabled:=true;
      end;
    end;procedure TForm1.Timer2Timer(Sender: TObject);
    begin
     if form1.Top<=20 then
        form1.Top:=-(form1.Height-5);
    end;
    end.