-2

我正在使用德尔福

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

当我在分辨率较低的屏幕上运行程序时,组件更靠右并出现滚动条。无论分辨率如何,我都希望我的组件准确地出现在表单的中间。如何?

4

3 回答 3

7

屏幕分辨率不是问题,除非你在谈论最大化的形式,所以我会假设。这意味着您无法在更改表单大小的中心对齐组件。

在这方面考虑单个控件,则解决方案相对简单:更改其在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)。

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

于 2013-08-31T11:40:33.927 回答
3

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

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

于 2013-08-31T08:16:13.730 回答
0

如果组件必须始终居中,请使用TGridPanel放置组件。TGridPanel 将根据每个单元格中的AlignmentVerticalAlignment属性 对齐它的子组件。

  • 将 TGridPanel 放置在要显示组件的位置
  • 对齐设置为alClient
  • ColumnCollection设置为仅一列。
  • RowCollection设置为仅一行。
  • 对齐设置为taCenter
  • VerticalAlignment设置为taVerticalCenter
  • 将您的组件放在 TGridPanel 中

注意:您可以在 TGridPanel 的每个单元格中仅放置一个组件,为了克服此限制,将 TPanel 放置在一个单元格中,然后在该面板中放置多个组件。

于 2019-09-16T14:49:09.640 回答