在屏幕的右下角位置显示表单

bhmjp9jg  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(152)

我注意到Delphi 11.1 Windows应用程序中有一个奇怪的问题。

我需要在屏幕右下角显示Form3,5分钟后一个按钮被点击:

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Timer2.Enabled := False;

  // Set form position on bottom right of the screen
  with Form3 do
  begin
  Top := Screen.Height - Form3.Height - GetTaskBar_Y_Bottom_Height();
  Left := Screen.Width - Form3.Width - GetTaskBar_X_Right_Width();
  end;

  // Now show the form
  Form3.Show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer2.Enabled := True;
end;

它工作正常,表格显示在屏幕的右下角...嗯,大多数时候都是这样。

因为在某些情况下,它显示在屏幕的左上角:

即使Screen.Height和Screen.Width是正确的:

Screen.Height = 1080
Screen.Width = 1920

你有什么建议吗?

一些其他详细信息:

  • 我使用的是1920 x 1080分辨率的单显示器。
  • 应用程序的清单使用“Per Monitor v2”。
hec6srdp

hec6srdp1#

由于您还没有响应我对GetTaskBar...函数的请求,我们可以放弃它们,使用更好的方法来评估可用的工作区。

此外,您没有考虑到任务栏的位置。许多用户(如果不是大多数的话)让它保持在底部,但用户可能更喜欢将它保持在显示器的左侧、顶部或右侧边缘。

要考虑不同的布局,可以使用类似Form3OnShow事件:

procedure TForm3.FormShow(Sender: TObject);
begin
  Left := Screen.WorkAreaRect.Right - Width;
  Top := Screen.WorkAreaRect.Bottom - Height;
end;

您可以从Form1中的计时器事件调用它

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Timer2.Enabled := False;
  Form3.Show;
end;

相关问题