Delphi元素对齐 - 中心

时间:2014-05-19 17:47:20

标签: delphi vcl delphi-xe6

似乎有align属性可以很好地工作,但是可以对齐元素,这样如果所有元素都小于容器的大小,那么面板上的所有元素都将对齐到彼此底部的所有元素?像顶部中心那样的东西。

这样的事情:

Something like this

或至少水平,垂直,他们可以有100%。

4 个答案:

答案 0 :(得分:8)

将元素放入自己的容器中,例如TPanelTFrame,它是主容器的子容器。将子容器的Align属性设置为alCustom,并使用父容器的OnAlignPosition事件使子容器保持居中:

// Panel1 is the Parent container for the child panel...
procedure TMyForm.Panel1AlignPosition(Sender: TWinControl; Control: TControl;
  var NewLeft, NewTop, NewWidth, NewHeight: Integer; var AlignRect: TRect;
  AlignInfo: TAlignInfo);
begin
  if Control = ChildPanel then
  begin
    NewLeft := AlignRect.Left + ((AlignRect.Width - Control.Width) div 2);
    NewTop := AlignRect.Top + ((AlignRect.Height - Control.Height) div 2);
  end;
end;

答案 1 :(得分:2)

无需编码任何东西。只需以正确的方式放置面板和其他可视对象,就可以设置可视对象的属性,如下所示:

Align: alNone or alCustom
and
Anchors: none (akLeft=False, akTop=False, akRight=False, akBottom=False)

比对象将保持其相对水平和垂直位置。如果将它放在容器的中间,它将保持居中。

仅将垂直集中心

Align: alNone or alCustom
and
Anchors: akTop=True OR akBottom=True

仅以水平集中心

Align: alNone or alCustom
and
Anchors: akLeft=True OR akRight=True

答案 2 :(得分:1)

您可以使用这个小程序使控件居中

procedure CenterControl( AControl : TControl );
begin
  if Assigned( AControl.Parent )
  then
    begin
      // remove alignment
      AControl.Align := alNone;
      // remove the anchors
      AControl.Anchors := [];
      // center on parent
      AControl.Left := ( AControl.Parent.ClientWidth - AControl.Width ) div 2;
      AControl.Top := ( AControl.Parent.ClientHeight - AControl.Height ) div 2;
    end
  else
    raise Exception.Create( 'Control needs a Parent!' );
end;

如果父级调整大小,控件将始终居中,只要您没有更改其大小。

答案 3 :(得分:0)

在RAD 10+中,控件TRelativePanel具有AlignVerticalCenterWithPanel和AlignHorisontalCenterWithPanel寿命保存选项(以及其他有用功能)。

您还可以使用TRelativePanel提供的属性Above / Below / etc将不可见的线或点放置在中心,并在其周围构建其他控件。 值得一提的是,控制是按最高的Embarcadero质量标准进行的(仅在设计模式下崩溃)。