如何使主窗体出现在第二个监视器中



我使用 Delphi 10,当我创建默认 vcl 应用程序并运行应用程序时,我有两个显示器,主窗体总是出现在第一个显示器中,有没有办法让它默认出现在第二个显示器中?

这可能是 IDE 或属性或代码中的选项

谢谢

TForm有一个默认设置为 dmActiveFormDefaultMonitor 属性。 当没有窗体处于活动状态时,将使用主监视器。 但是,无法专门将DefaultMonitor设置为第二个监视器。

TForm 还具有 Monitor 属性,但无论出于何种原因,它都是只读的。

因此,若要在特定监视器上显示TForm,可以在全局TScreen.Monitors[]列表中找到所需的监视器,然后:

  1. 手动将窗体的 Left/Top 属性设置为监视器的BoundsRectWorkareaRect属性边界内的 X/Y 坐标。

  2. 将监视器传递给窗体的公共MakeFullyVisible()方法。

我有两个宽度为 1600px 的显示器。我的主要监视器在右侧,因此,为了在左侧放置一个表单,我必须为他的Left属性传递一个负值。

procedure TForm1.Button1Click(Sender: TObject);
begin
  // (3200 / 2 = + 1600) * -1 = -1600
  Left := (Screen.DesktopWidth div 2) * -1;
end;

结果是-1600这意味着我的辅助显示器左侧最多。

您还可以通过调用 Screen.Monitors[i].Left 来获取每个监视器的"最左"位置,类似于以下代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  lMens: string;
begin
  lMens := '';
  for I := 0 to Screen.MonitorCount - 1 do
  begin
    lMens := lMens + ' | '
             + Format('%d - Left = %d', [i, Screen.Monitors[i].Left])
  end;
  ShowMessage(lMens);
end;

我希望对你有帮助。

最新更新