请教各位大侠,在delphi里面怎样实现象qq那种界面隐藏效果,就是说把窗体拖到屏幕边缘,鼠标移开后窗体隐藏,当鼠标移到屏幕边上时窗体自动出现。

解决方案 »

  1.   

    先声明这代码不是我的,是伴水的
    unit Unit1;interfaceuses
       Windows,  Messages,  SysUtils,  Variants,  Classes,  Graphics,  Controls,  Forms,  
       Dialogs,  StdCtrls,  ExtCtrls,math;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
              FAnchors:  TAnchors;  
           procedure  WMMOVING(var  Msg:  TMessage);  message  WM_MOVING;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
     
    procedure  TForm1.WMMOVING(var  Msg:  TMessage);  
    begin  
       inherited;
       with  PRect(Msg.LParam)^  do  begin
           Left:= Min(Max(0, Left),  Screen.Width -Width);
           Top  :=  Min(Max(0,  Top),  Screen.Height  -  Height);
           Right  :=  Min(Max(Width,  Right),  Screen.Width);
           Bottom  :=  Min(Max(Height,  Bottom),  Screen.Height);  
           FAnchors  :=  [];  
           if  Left  =  0  then  Include(FAnchors,  akLeft);  
           if  Right  =  Screen.Width  then  Include(FAnchors,  akRight);  
           if  Top  =  0  then  Include(FAnchors,  akTop);
           if  Bottom  =  Screen.Height  then  Include(FAnchors,  akBottom);
           Timer1.Enabled  :=  FAnchors  <>  [];
       end;  
    end;  
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Timer1.Enabled  :=  False;
       Timer1.Interval  :=  100;
       FormStyle  :=  fsStayOnTop;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    const  
       cOffset  =  2;  
    begin  
       if  WindowFromPoint(Mouse.CursorPos)  =  Handle  then  begin  
           if  akLeft  in  FAnchors  then  Left  :=  0;  
           if  akTop  in  FAnchors  then  Top  :=  0;  
           if  akRight  in  FAnchors  then  Left  :=  Screen.Width  -  Width;  
           if  akBottom  in  FAnchors  then  Top  :=  Screen.Height  -  Height;  
       end  else  begin
           if  akLeft  in  FAnchors  then  Left  :=  -Width  +  cOffset;  
           if  akTop  in  FAnchors  then  Top  :=  -Height  +  cOffset;  
           if  akRight  in  FAnchors  then  Left  :=  Screen.Width  -  cOffset;  
           if  akBottom  in  FAnchors  then  Top  :=  Screen.Height  -  cOffset;  
       end; 
    end;end.