实例讲解如何在Delphi中动态创建dxBarManager内容

一、dxBarManager中一些非常重要的概念:

   TCategorys:为了方便对dxBarManager中的项目进行归类而设计的一个属性,当然,只使用默认的名字为Default的Category也没有关系,只是如果在设计界面上只用一个而不用其他的Category会显得非常乱。

    TdxBarSubItem:可以挂载其他TdxBarItem项目的一个容器,相当于【主菜单】。

    TdxBarButton:具体的项目栏,相当一个【菜单项】。

    TdxBarSepartor:分隔线。

    TdxBarItemLink:项目链接关系,比如,想要把一个dxBarSubItem对象放置在一个容器对象上(如想放置在dxBar上),其步骤就是:先在dxBar上创建一个dxBarItemLink,然后让这个新建的dxBarItemLink.Item指向这个dxBarSubItem。同样的道理,如果想要把一个dxBarButton对象挂载在一个dxBarSubItem对象容器下,也是先创建一个dxBarItemLink,然后让这个新建的dxBarItemLink.Item指向该dxBarButton。

二、创建一个TdxBarSubItem,并在它下面挂载5个TdxBarButton

procedure TMainForm.btn_AddClick(Sender: TObject);
var
  aItemLink: TdxBarItemLink;
  aSubItem: TdxBarSubItem;
  aBarButton: TdxBarButton;
  aSeparator: TdxBarSeparator;//分隔线
  i: Integer;
begin
  //创建一个dxSubItem,相当于创建一个主菜单项
  aSubItem := TdxBarSubItem.Create(Self);
  i := aSubItem.BarManager.Categories.Count+1;
  aSubItem.Caption := Format('系统菜单%d',[i]);

  aItemLink := aSubItem.BarManager.Bars[0].ItemLinks.Add;
  aItemLink.Item := aSubItem;

  //======以下这两行代码,纯属为了把每个dxSubItem归属到一个不同的类别下====//
  //==同时也是为了方便在dxBarManager中统计出到底创建了多少个“主”菜单
  //未清除Category之前,dxBarManager在创建时默认会创建一个名为Default的Category
  aSubItem.BarManager.Categories.Add(Format('Categories_%-2d',[i]));
  aSubItem.Category := i;

  //创建一个dxBarButton,相当于创建一个明细菜单项
  for i := 1 to 5 do
  begin
    aBarButton := TdxBarButton.Create(Self);//内存资源由Self负责管理
    aBarButton.Caption := Format('菜单项%d',[i]);
    aBarButton.OnClick:= mi_ItemOnClick; //动态添加Button的Onclick单击事件

    aItemLink := aSubItem.ItemLinks.Add;
    aItemLink.Item := aBarButton;

    if (i mod 3 = 0) and (i<5) then //放上一个分隔线
    begin
      aSeparator := TdxBarSeparator.Create(Self);
      aSeparator.Caption := '分隔线';
      aSeparator.ShowCaption := False;
      aItemLink := aSubItem.ItemLinks.Add;
      aItemLink.Item := aSeparator;
    end;
  end;
end;
三、显示dxBarManager中的内容,看看它到底创建一些什么东西。

procedure TMainForm.btn_DisplayClick(Sender: TObject);
var
  I: Integer;
begin
  //看看dxBarManager1中到底有些什么东西
  Memo1.Clear;
  Memo1.Lines.Add(Format('dxBarManager中Category总数量=%d,Category Name分别为:',[dxbarManager1.Categories.Count]));
  Memo1.Lines.AddStrings(dxBarManager1.Categories);
  Memo1.Lines.Add('=================================');
  for I := 0 to dxBarManager1.ItemCount-1 do
  begin
    Memo1.Lines.Add(Format('%.3d:Caption=%-10s,Category=%2d,%-20s',
      [i+1,dxBarManager1.Items[i].Caption,dxbarManager1.Items[i].Category,dxBarManager1.Items[i].ClassName])
    );
  end;
end;
四、如何清除dxBarManager中的内容

procedure TMainForm.btn_ReleaseClick(Sender: TObject);
var
  I: Integer;
begin
  //dxBarManager1Bar1.ItemLinks.Clear;
  dxBarManager1.Categories.Clear;
  for i:=dxBarManager1.ItemCount downto 0 do //必须使用downto
    dxBarManager1.Items[i].Free;
end;
五、看看运行效果

六、Demo下载

点击下载Demo&Exe源码

原文地址:https://www.cnblogs.com/xieyunc/p/9126540.html