• 实例讲解如何在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源码

  • 相关阅读:
    linux驱动移植信号驱动IO模型
    linux驱动移植软中断
    linux驱动移植中断注册
    linux驱动移植进程同步之自旋锁
    aspose java word 插入特殊字符
    Web server failed to start. Port 9702 was already in use.
    mongo根据数组长度查询
    minio清空某个bucket下的所有文件
    将 XSSFWorkbook 转为 inputstream
    aspsoe 合并多个文档(保证每个文档的第一页在最新的一页)
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126540.html
Copyright © 2020-2023  润新知