控制Delphi 2006中新打开窗口的位置(x,y)

时间:2008-12-19 20:35:46

标签: windows delphi

我正在尝试控制我的程序打开一个新窗口的位置的坐标,因为目前它们是彼此打开的。有没有人有一个如何做到这一点的工作实例?

2 个答案:

答案 0 :(得分:6)

您始终可以手动设置.Top和.Left属性,如下所示:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm : TForm;
begin
  frm := TForm.Create(Self);
  frm.Left := 100;  //replace with some integer variable
  frm.Top := 100;  //replace with some integer variable
  frm.Show;
end;

但是,Windows有一个默认的窗口放置算法,它会尝试保持每个窗口的标题栏可见。在我的计算机上,重复点击这个Button1程序可以得到很好的堆叠窗口:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm : TForm;
begin
  frm := TForm.Create(Self);
  frm.Show;
end;

另外,不要忘记您可以使用内置的TPosition位置集:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm : TForm;
begin
  frm := TForm.Create(Self);
  frm.Position := poOwnerFormCenter;
  {
  Other possible values:
    TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly,
      poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter);

  //}
  frm.Show;
end;

答案 1 :(得分:4)

another question on SO中已针对C#解释了此类功能。

另外,对于Delphi,请查看Delphi中的Understanding and Using Windows Callback Functions,其中描述了获取当前打开的窗口的句柄。并且请参阅Shake a window (form) from Delphi code,其中介绍了在获得操作后如何移动窗口。