你们是不会还是因为不给分就没人回答呀?!真让我失望。我现在已经自己搞定了!
//自定义函数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 TFrm_Main.Timer1Timer(Sender: TObject);
var
winPos: TPoint;
begin
if (Frm_Main.Top <= 3) then //判斷
begin
GetCursorPos(winpos); //得到当前鼠标指针的在屏幕上的坐标
//当鼠标指针下的窗体的Name等于主Form.name时
if Frm_Main.name = GetFormNameAt(winpos.X, winpos.Y) then
{在此我们可以为form1取一个特别的名称,以防有别的窗体名称与它相同}
begin
Frm_Main.Timer2.Enabled := false; //停用Timer2
Frm_Main.Top := 0; //主Form的Top与屏幕对齐
end
else
begin
Frm_Main.Timer2.Enabled := true; //开启Timer2
Hide_Type := '0';
end;
end
else if (Frm_Main.Left >= screen.Width - Frm_Main.Width - 3) then //判斷
begin
GetCursorPos(winpos); //得到当前鼠标指针的在屏幕上的坐标
//当鼠标指针下的窗体的Name等于主Form.name时
if Frm_Main.name = GetFormNameAt(winpos.X, winpos.Y) then
{在此我们可以为主Form取一个特别的名称,以防有别的窗体名称与它相同}
begin
Frm_Main.Timer2.Enabled := false; //停用Timer2
Frm_Main.Left := (screen.Width - Frm_Main.Width); //主Form的Right与屏幕对齐
end
else
begin
Frm_Main.Timer2.Enabled := true; //开启Timer2
Hide_Type := '1';
end;
end;
end;
procedure TFrm_Main.Timer2Timer(Sender: TObject);
begin
if Hide_Type = '0' then
begin
if (Frm_Main.Top <= 20) and (Frm_Main.Left < (screen.Width - Frm_Main.Width)) then
Frm_Main.Top := -(Frm_Main.Height - 10); //将主Form向上移,在屏幕上方露出10像素
end
else
if Hide_Type = '1' then
begin
//if Frm_Main.Top <= 20 then
Frm_Main.Left := (screen.Width - 10); //将主Form向右移,在屏幕右方露出10像素
end
end;