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