5

我有一个 Delphi 6 应用程序,它在主窗体出现后启动一个向导。向导是一种模态形式。我的一位用户将他们的 Windows 桌面扩展到了不止一台显示器。在他们的情况下,主窗体出现在主监视器上,向导出现在扩展监视器上。这会造成混乱,因为当他们尝试单击主窗体时,他们认为应用程序已冻结。由于向导是开放的和模态的,除了他们听到警告“叮”声告诉您表单无法接收输入之外,什么也没有发生。

我可以做些什么来确保向导窗体出现在与主窗体相同的监视器上,在这种情况下是主监视器?我将向导表单设置为 poDesktopCenter。

4

1 回答 1

8

手动理论:

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;

当您当前工作时,您将Form3集中Form2在当前所在的同一监视器上,但主要是在同一监视器上:Form2

在此处输入图像描述

于 2012-06-22T11:24:08.850 回答