Delphi 不管屏幕分辨率如何,都要使组件出现在窗体中间。

Delphi 不管屏幕分辨率如何,都要使组件出现在窗体中间。,delphi,Delphi,我正在使用delphi 我有一个在多家商店运行的程序,但有些人的屏幕分辨率较低,有些人的屏幕分辨率较高 当我在分辨率较低的屏幕上运行该程序时,组件更向右,并出现一个滚动条。 我希望我的组件出现在表格的中间,不管分辨率如何。 如何使用?您可以使用锚属性。例如,如果您根据需要对齐TEdit、TCOMBOX,并且希望它们在表单的左右两侧始终具有相同的位置,只需相应地设置锚属性(akLeft=True,akRight=True)。您可以在设计时或从代码中执行此操作 问题的描述实际上并不清楚。屏幕分辨率不

我正在使用delphi

我有一个在多家商店运行的程序,但有些人的屏幕分辨率较低,有些人的屏幕分辨率较高

当我在分辨率较低的屏幕上运行该程序时,组件更向右,并出现一个滚动条。 我希望我的组件出现在表格的中间,不管分辨率如何。
如何使用?

您可以使用锚属性。例如,如果您根据需要对齐TEdit、TCOMBOX,并且希望它们在表单的左右两侧始终具有相同的位置,只需相应地设置锚属性(akLeft=True,akRight=True)。您可以在设计时或从代码中执行此操作


问题的描述实际上并不清楚。

屏幕分辨率不是问题,除非你们在谈论最大化表单,所以我假设。这意味着您在更改表单大小的中心对齐组件时遇到困难

在这方面考虑单个控件,那么解决方案相对简单:更改其在
OnResize
事件处理程序中的位置:

procedure TForm1.FormResize(Sender: TObject);
begin
  Control.Left := (ClientWidth - Control.Width) div 2;
  Control.Top := (ClientHeight - Control.Height) div 2;
end;
对于多控制情况,最简单的解决方案是将其放置在单个容器(例如面板)上,并使用上述方法。但对于小表单,这可能会导致容器太大,导致如您所说的那样显示表单的滚动条(这可能会被表单的
AutoScroll
属性所抑制),对于大表单,容器可能会渲染得太小

另一个解决方案是:只需将所有控件的
锚定
属性设置为
[]
,所有控件都将保持在其相对位置,而不管窗体大小如何。(这个技巧也适用于解决方案#1)


在这两种情况下,控件的大小和字体大小保持不变,这可能会或将扭曲布局。有多种可能的解决方案,但我认为这超出了您的问题和答案的范围。

如果组件必须始终居中,请使用TGridPanel放置组件。TGridPanel将根据每个单元内的对齐和垂直对齐属性对齐其子组件

  • 将TGRID面板放置在要显示组件的位置
  • 将对齐设置为alClient
  • 列集合设置为仅一列
  • 行集合设置为仅一行
  • 将对齐设置为taCenter
  • 将垂直对齐设置为垂直中心
  • 将组件放置在TGRID面板中
注意:您只能在TGridPanel的每个单元格中放置一个组件,要克服此限制,请在单元格中放置TPanel,然后在该面板中放置多个组件


你看,我有一个顶部和左边的属性,我设置了组件顶部和左边的属性,所以组件出现在窗体的中间,但是当我在一个较小的屏幕上运行程序时,组件就不再在中间了。如果你遇到这样的问题,你的整个UI设计都是错误的,你应该拿起一本书或者读一篇关于标准GUI设计实践的文章。哪个版本的Delphi?我知道在Delphi6中,即使使用锚定和设置Scaled属性,启用大字体的机器仍然会在相当大的表单上破坏UI。请重新发布您真正的问题。似乎您已经知道如何让组件保持在表单的中心,但您确实希望它们保持在屏幕的中心。这是一个不同的问题。这并不能解决我的问题,我上面的评论是否更清楚?它可能不能解决你的问题,但它回答了你提出的问题。你问,我希望我的组件出现在表格的中间,不管分辨率如何。如果你想问一个不同的问题,那是你自己的错,但这是你所问问题的答案。虽然这种解决方案可以回答问题,但它也会调整组件的大小,这肯定不是你想要的。不会
Control.Left:=Round((ClientWidth-Control.Width)/2)更准确?@绿色欧米茄是的。但是我更喜欢(1)这个调整大小处理程序中的整数(更快)计算,(2)更干净的代码,(3)不用麻烦,因为您不会注意到差异。