我正在尝试控制我的程序打开一个新窗口的位置的坐标,因为目前它们是彼此打开的。有没有人有一个如何做到这一点的工作实例?
答案 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,其中介绍了在获得操作后如何移动窗口。