RAD Studio VCL Reference
ContentsIndex
PreviousUpNext
TMargins Class

Contains margins for the control.

Pascal
TMargins = class(TPersistent);
C++
class TMargins : public TPersistent;

TMargins is used in the Margins property of TControl and its descendants. TMargins help define the relative position between components on a form, and between the edges of the form and the component. For example, when you set a left margin for a component to 10 pixels, the component will not come closer than 10 pixels to the edge of the container, or to another component on the left edge. The number of pixels by which two components are separated is the sum of the pixels of both components.  

For example, if you place a component on the form with a left margin of 10 pixels, then add another component to it's left with a right margin of 20 pixels, the closest the two components can come together on those edges is 30 pixels.  

You can define the amount of margin that should surround the component on the top, left, bottom, or right by changing the pixel value for the Margins property in the Object Inspector.

Note: For the Margins
settings to take effect on a component, you must also set its AlignWithMargins property to True.  

C++ Examples: 

 

//
//This example demostrates the usage of Margins and AlignWithMargins
//properties. Note that Margins will only work when AlignWithMargins
//is set to true and Align is not alNone.
//

#define TopPanelMargin 10
#define BottomPanelMargin 20

TPanel *TopPanel, *BottomPanel;

void __fastcall TForm2::FormCreate(TObject *Sender)
{
    /* Create a new panel and align it to top */
    TopPanel = new TPanel(this);
    TopPanel->Parent = this;
    TopPanel->Align = alTop;
    TopPanel->Height = (ClientHeight / 2);

    /* Create a new panel and align it to the remaining client size */
    BottomPanel = new TPanel(this);
    BottomPanel->Parent = this;
    BottomPanel->Align = alClient;

    /* Set Top panel margins */
    /* Note: Margins will not have an effect if Align is alNone */
    TopPanel->Margins->SetBounds(TopPanelMargin, TopPanelMargin,
                                 TopPanelMargin, TopPanelMargin);
    TopPanel->AlignWithMargins = true;
    TopPanel->Caption = "TopPanel";

    /* Set Top Bottom margins */
    /* Note: Margins will not have an effect if Align is alNone */
    BottomPanel->Margins->SetBounds(BottomPanelMargin, BottomPanelMargin,
                                   BottomPanelMargin, BottomPanelMargin);
    BottomPanel->AlignWithMargins = true;
    BottomPanel->Caption = "BottomPanel";

    if ((TopPanel->Top != TopPanelMargin) ||
       (TopPanel->Left != TopPanelMargin) ||
       (TopPanel->Width != (ClientWidth - (TopPanelMargin * 2))) ||
       (BottomPanel->Top != (TopPanel->Height + (TopPanelMargin * 2) +
                                               BottomPanelMargin)) ||
       (BottomPanel->Left != BottomPanelMargin) ||
       (BottomPanel->Width != (ClientWidth - (BottomPanelMargin * 2))))
       {
          MessageDlg(AnsiString(
            "This should not happen! Position and size are ")+
            "calculated relative to the margins",
            mtError, TMsgDlgButtons() << mbOK, 0);
       }
}

 

Delphi Examples: 

{
This example demostrates the usage of Margins and AlignWithMargins
properties. Note that Margins will only work when AlignWithMargins
is set to true and Align is not alNone.
}
const
  TopPanelMargin = 10;
  BottomPanelMargin = 30;

var
  TopPanel, BottomPanel : TPanel;

procedure TForm2.FormCreate(Sender: TObject);
begin
  { Create a new panel and align it to top }
  TopPanel := TPanel.Create(Self);
  TopPanel.Parent := Self;
  TopPanel.Align := alTop;
  TopPanel.Height := (ClientHeight div 2);

  { Create a new panel and align it to the remaining client size }
  BottomPanel := TPanel.Create(Self);
  BottomPanel.Parent := Self;
  BottomPanel.Align := alClient;

  { Set Top panel margins }
  { Note: Margins will not have an effect if Align is alNone }
  TopPanel.Margins.SetBounds(TopPanelMargin, TopPanelMargin,
                             TopPanelMargin, TopPanelMargin);
  TopPanel.AlignWithMargins := true;
  TopPanel.Caption:= 'TopPanel';

  { Set Bottom panel margins }
  { Note: Margins will not have an effect if Align is alNone }
  BottomPanel.Margins.SetBounds(BottomPanelMargin, BottomPanelMargin,
                               BottomPanelMargin, BottomPanelMargin);
  BottomPanel.AlignWithMargins := true;
  BottomPanel.Caption:= 'BottomPanel';

  if (TopPanel.Top <> TopPanelMargin) or
     (TopPanel.Left <> TopPanelMargin) or
     (TopPanel.Width <> (ClientWidth - (TopPanelMargin * 2))) or
     (BottomPanel.Top <> (TopPanel.Height + (TopPanelMargin * 2) +
                                               BottomPanelMargin)) or
     (BottomPanel.Left <> BottomPanelMargin) or
     (BottomPanel.Width <> (ClientWidth - (BottomPanelMargin * 2)))
     then
       MessageDlg('This should not happen! Position and size are ' +
            'calculated relative to the margins', mtError, [mbOK], 0);
end;

 

Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!