Back to Devexpress

How to Create a Toolbar and Position it on Screen

vcl-155082-expressbars-how-to-create-a-toolbar-and-position-it-on-screen.md

latest3.7 KB
Original Source

How to Create a Toolbar and Position it on Screen

  • Dec 28, 2020
  • 2 minutes to read

The following function creates a new toolbar and sets it to a desired position on screen. The parameters used are as follows:

ABarManagerSpecifies the bar manager which manages the toolbar.
ACaptionSpecifies the caption of the new toolbar.
ADockingStyleSpecifies the dock control onto which the toolbar is placed.
ARow and AColSpecifies toolbar position on a dock control. It is used if ADockingStyle does not equal dsNone.
AInsertIf True , a new toolbar will occupy the entire row in a dock control.
AIsVisibleDetermines, whether a new toolbar will be visible.
delphi
function CreateBar(ABarManager: TdxBarManager; ACaption: string; ADockingStyle: TdxBarDockingStyle; ARow, ACol: Integer; AInsert: Boolean; AVisible: Boolean): TdxBar;
var
  AIsVertical: Boolean;
  ADockRow: TdxDockRow;
begin
  Result := ABarManager.Bars.Add;
  with Result do
  begin
    Caption := ACaption;
    DockingStyle := ADockingStyle;
    if ARow < 0 then ARow := 0;
    Row := ARow;
    OneOnRow := AInsert;
    if (ACol <> -1) and (DockingStyle <> dsNone) then
    begin
      DockControl := TdxBarDockControl(BarManager.Bars.DockControls[DockingStyle]);
      if Row < DockControl.RowList.Count then
      begin
        AIsVertical := DockingStyle in [dsLeft, dsRight];
        ADockRow := TdxDockRow(DockControl.RowList[Row]);
        if ADockRow.ColList.Count > 0 then
        begin
          if ACol < 0 then ACol := 0;
          if ACol >= ADockRow.ColList.Count then
            with TdxDockCol(ADockRow.ColList.Last) do
            if AIsVertical then
              Result.DockedTop := DockedTop + BarControl.Height
            else
              Result.DockedLeft := DockedLeft + BarControl.Width
          else
            with TdxDockCol(ADockRow.ColList[ACol]).Pos do
              if AIsVertical then DockedTop := Y
              else DockedLeft := X;
          end;
        end;
    end;
    Visible := AVisible;
  end;
end;
cpp
TdxBar * CreateBar(TdxBarManager * ABarManager, AnsiString ACaption, TdxBarDockingStyle ADockingStyle, int ARow, int ACol, bool AInsert, bool AVisible)
{
  bool AIsVertical;
  TdxDockRow * ADockRow;
  TdxBar * ANewBar;
  TdxDockCol * ADockCol;
  ANewBar = ABarManager->Bars->Add();
  ANewBar->Caption = ACaption;
  ANewBar->DockingStyle = ADockingStyle;
  if (ARow < 0) ARow = 0;
  ANewBar->Row = ARow;
  ANewBar->OneOnRow = AInsert;
  if (ACol != -1 && ANewBar->DockingStyle != dsNone)
  {
    ANewBar->DockControl = (TdxBarDockControl *)(ABarManager->Bars->DockControls[ANewBar->DockingStyle]);
    if (ANewBar->Row < ANewBar->DockControl->RowList->Count)
    {
      AIsVertical = ((ANewBar->DockingStyle == dsLeft) || (ANewBar->DockingStyle == dsRight));
      ADockRow = (TdxDockRow *)(ANewBar->DockControl->RowList->Items[ANewBar->Row]);
      if (ADockRow->ColList->Count > 0)
      {
        if (ACol < 0) ACol = 0;
        if (ACol >= ADockRow->ColList->Count)
        {
          ADockCol = (TdxDockCol *) ADockRow->ColList->Last();
          if (AIsVertical)
            ANewBar->DockedTop = ANewBar->DockedTop + ADockCol->BarControl->Height;
          else
            ANewBar->DockedLeft = ANewBar->DockedLeft + ADockCol->BarControl->Width;
        }
        else
        {
           ADockCol = (TdxDockCol*) ADockRow->ColList->Items[ACol];
           if (AIsVertical)
             ANewBar->DockedTop = ADockCol->Pos.y;
           else
             ANewBar->DockedLeft = ADockCol->Pos.x;
        }
      }
    }
  }
    ANewBar->Visible = AVisible;
  return ANewBar;
}