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.
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
ReleaseCapture;
Perform(WM_SYSCOMMAND,$f012,SC_MOVE)
放在onmousemove里面
像QQ那样的东东,我也要,[email protected]
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.