[ACCEPTED]-Delphi element alignment - center-delphi-xe6
Put the elements into their own container, such 5 as a TPanel
or TFrame
, that is a child of your main 4 container. Set the child container's Align
property 3 to alCustom
and use the parent container's OnAlignPosition
event 2 to keep the child container centered to 1 itself:
// 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;
There is no need for coding anything. Just 8 place panels and other visual objects in 7 the right way an set the properties of the 6 visual objects as shown here:
Align: alNone or alCustom
and
Anchors: none (akLeft=False, akTop=False, akRight=False, akBottom=False)
Than and an 5 object will stay at its relative horizontal 4 and vertical position. If you place it in 3 the middle in a container it will stay centered.
To 2 center it only vertical set
Align: alNone or alCustom
and
Anchors: akTop=True OR akBottom=True
To center it 1 only horizontal set
Align: alNone or alCustom
and
Anchors: akLeft=True OR akRight=True
You can center the control with this little 3 procedure
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;
If the parent gets resized the 2 control will always be centered, as long 1 as you did not change its size.
In RAD 10+ there is control TRelativePanel 9 which has AlignVerticalCenterWithPanel and 8 AlignHorisontalCenterWithPanel life-save 7 options (and other useful capabilities).
You 6 can also position invisilble line or dot 5 in the center and build other controls around 4 it with TRelativePanel provided properties 3 Above/Below/etc. Worth to mention, control 2 is made on top level Embarcadero quality 1 standards (crashes only in design mode).
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.