Rob*_*ler 5 delphi multiple-monitors
我有一个Delphi 6应用程序,在主窗体出现后启动向导.向导是一种模态形式.我的一个用户将其Windows桌面扩展到多个监视器.在它们的情况下,主窗体出现在主监视器上,向导出现在扩展监视器上.这会产生混淆,因为他们认为应用程序在尝试单击主窗体时已冻结.由于向导是打开的并且是模态的,所以没有任何事情发生,除非他们听到警告"叮"声,告诉你表单无法接收输入.
我该怎么做才能确保向导表单与主表单在同一监视器上显示,在这种情况下是主监视器?我将向导表单设置为poDesktopCenter.
手动理论:
使用poMainFormCenter时要由居中的形式Application.MainForm.简而言之,应用程序主表单是运行应用程序时可以看到的第一个表单,您应该认为此主表单可以位于与创建和居中新表单的活动窗口不同的监视器上.
或者如果你想通过它来集中你的表格Owner,使用poOwnerFormCenter恕我直言的更好的用户体验,因为当你有两个以上的窗口相互打开时,你可以将窗口移动到另一个监视器并在监视器上创建新窗口用户目前正在工作.
实用用例:
用户在第一台显示器上运行您的应用程序 该应用程序创建了Form2它的MainForm.用户Form2在第二台显示器上移动了它,并从那里按下了创建另一个窗体的按钮,Form3.
如果你设计的是你Form3使用的poMainFormCenter位置,那么Form3它将MainForm在不同的监视器上居中,恕我直言的是什么令人困惑.

如果您使用这样的代码来创建和显示Form3:
procedure TForm2.Button1Click(Sender: TObject);
begin
// the Owner parameter Self (or Form2 here) in the Form3 constructor along
// with the Position set to poOwnerFormCenter will ensure you that the form
// will be centered by the current form position, so on the current monitor
// where the user works on as well
Form3 := TForm3.Create(Self);
try
Form3.Position := poOwnerFormCenter;
Form3.ShowModal;
finally
Form3.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
您将获得Form3由心Form2而主要是一台监视器上为Form2当前位于,因为你目前工作:
