无论屏幕分辨率如何,都会使组件出现在窗体中间

时间:2013-08-31 08:00:30

标签: delphi

我正在使用delphi

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

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

3 个答案:

答案 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放置在要显示组件的位置
  • Align 设置为 alClient
  • ColumnCollection 设置为仅一列。
  • RowCollection 设置为仅一行。
  • Alignment 设置为 taCenter
  • VerticalAlignment 设置为 taVerticalCenter
  • 将组件放置在TGridPanel中
  

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