我使用 Delphi 10,有两个显示器。当我创建默认的 VCL 应用程序并运行应用程序时,主窗体总是出现在第一个显示器上。有没有办法让它默认出现在第二个显示器上?
这可能是 IDE、属性或代码中的选项。
谢谢。
我使用 Delphi 10,有两个显示器。当我创建默认的 VCL 应用程序并运行应用程序时,主窗体总是出现在第一个显示器上。有没有办法让它默认出现在第二个显示器上?
这可能是 IDE、属性或代码中的选项。
谢谢。
TForm
有一个DefaultMonitor
属性,默认设置为dmActiveForm
。当没有活动窗体时,使用主监视器。但是,没有办法将DefaultMonitor
特定地设置为第二个监视器。
TForm
还有一个Monitor
属性,但出于某种原因,它是只读的。
因此,要在特定监视器上显示TForm
,可以在全局TScreen.Monitors[]
列表中找到所需的监视器,然后执行以下操作之一:
手动设置表单的 Left
/Top
属性,使其坐标在显示器的 BoundsRect
或 WorkareaRect
属性范围内。
将显示器传递给表单的公共 MakeFullyVisible()
方法。
MakeFullyVisible()
相同的事情 - 将窗体移动到指定的监视器上。 - undefined我有两个1600像素宽的显示器。我的主显示器在右边,因此,为了将表单放置在左侧,我需要给他的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;
我希望这能对您有所帮助。