unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, Graphics,
  StdCtrls, ExtCtrls;type
  THidePosition = (hpLeft, hpTop, hpRight);  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    FHided        : Boolean;       //窗体是否已经隐藏
    FHidePosition : THidePosition; //窗体隐藏的位置
    procedure CMMouseEnter(var Message: TMessage); message CM_MouseEnter;
  protected  public
    { Public declarations }  end;var
  Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.CMMouseEnter(var Message: TMessage);
begin
  if FHided then
  begin
    case FHidePosition of
      hpLeft  : Left := 0;
      hpTop   : Top := 0;
      hpRight : Left := Screen.Width - Width;
    end;
    FHided := false;
  end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  Constraints.MaxHeight := Screen.Height;
end;procedure TForm1.FormShow(Sender: TObject);
begin
//
end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
//
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
  p: TPoint;
  bInForm: Boolean;
begin
  if (not FHided) then
  begin
    GetCursorPos(p);
    p := ScreenToClient(p);
    bInForm := (p.X >-5 ) and (p.X <= Width)
               and (p.Y > -27) and (p.Y <= Height);
    if not bInForm then
    begin
      if ((Left < 10) and (Top < 10))
        or ((Screen.Width - (Left + Width) < 10) and (Top < 10)) then
      begin
        Top := 0 - Height + 2;
        FHidePosition := hpTop;
        FHided := true;
      end
      else if Top < 10 then
      begin
        Top := 0 - Height + 2;
        FHidePosition := hpTop;
        FHided := true;
      end
      else if Left < 10 then
      begin
        Left := 0 - Width + 2;
        FHidePosition := hpLeft;
        FHided := true;
      end
      else if Screen.Width - (Left + Width) < 10 then
      begin
        Left := Screen.Width - 1;
        FHidePosition := hpRight;
        FHided := true;
      end;
    end;
  end;
end;end.