我正在使用德尔福
我有一个在多个商店运行的程序,但有些人的屏幕分辨率低,有些人的屏幕分辨率高。
当我在分辨率较低的屏幕上运行程序时,组件更靠右并出现滚动条。无论分辨率如何,我都希望我的组件准确地出现在表单的中间。如何?
我正在使用德尔福
我有一个在多个商店运行的程序,但有些人的屏幕分辨率低,有些人的屏幕分辨率高。
当我在分辨率较低的屏幕上运行程序时,组件更靠右并出现滚动条。无论分辨率如何,我都希望我的组件准确地出现在表单的中间。如何?
屏幕分辨率不是问题,除非你在谈论最大化的形式,所以我会假设。这意味着您无法在更改表单大小的中心对齐组件。
在这方面考虑单个控件,则解决方案相对简单:更改其在OnResize
事件处理程序中的位置:
procedure TForm1.FormResize(Sender: TObject);
begin
Control.Left := (ClientWidth - Control.Width) div 2;
Control.Top := (ClientHeight - Control.Height) div 2;
end;
对于多控制情况,最简单的解决方案是将它们放在单个容器上,例如面板,并使用上述方法。但是对于小型表单,这可能会导致容器太大,从而导致显示表单的滚动条(可以通过AutoScroll
表单的属性抑制),并且对于较大的表单尺寸,容器可能会渲染得太小。
另一种解决方案是相对锚解决方案:只需将所有控件的Anchors
属性设置[]
为,所有控件都将保持在它们的相对位置,而不管表单大小。(这个技巧也适用于解决方案#1)。
在这两种情况下,控件的大小和字体大小保持不变,这可能会或将扭曲布局。对此有多种可能的解决方案,但这超出了您的问题和我认为的答案的范围。
您可以使用 Anchors 属性。例如,如果您根据需要对齐 TEdit、TCombobox,并且希望它们在表单的左侧和右侧始终具有相同的位置,只需相应地设置 Anchors 属性(akLeft=True,akRight=True)。您可以在设计时或从代码中执行此操作。
PS问题的描述实际上并不那么清楚。
如果组件必须始终居中,请使用TGridPanel放置组件。TGridPanel 将根据每个单元格中的Alignment和VerticalAlignment属性 对齐它的子组件。
注意:您可以在 TGridPanel 的每个单元格中仅放置一个组件,为了克服此限制,将 TPanel 放置在一个单元格中,然后在该面板中放置多个组件。