一、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源码

版权声明:本文为博主原创文章,未经博主允许不得转载。

实例讲解如何在Delphi中动态创建dxBarManager内容的更多相关文章

  1. Delphi中动态创建窗体有四种方式

    Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...

  2. 在DELPHI中动态创建控件以及控件的事件

    在DELPHI中我们经常要动态的创建控件以及控件的事件.例如,我们可能想根据程序需要动态的创建一些Tshape组件来创建某个图形,并使得在鼠标移动上去之后可以完成某些操作.这一般需要需要三步: 生成一 ...

  3. Delphi 中 动态创建的Panel无法改变颜色的解决办法

    刚开始代码如下: procedure TForm1.Button1Click(Sender: TObject); var Panel: TPanel; begin Panel := TPanel.Cr ...

  4. Delphi中动态创建的Panel无法改变颜色的解决办法(要把Panel的ParentBackground设为False)

    刚开始代码如下: procedure TForm1.Button1Click(Sender: TObject); var Panel: TPanel; begin Panel := TPanel.Cr ...

  5. 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号

    在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...

  6. 如何在Delphi中调用VC6.0开发的COM

    上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过. ...

  7. 如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值

    如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值:比如 输入 单价,数量,计算金额. 参考: 1.  输入 单价,数量,计算金额 ...

  8. WPF 中动态创建和删除控件

    原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName(" ...

  9. 在ASP.NET中动态加载内容(用户控件和模板)

    在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<tab ...

随机推荐

  1. Android基本控件之ListView(二)<ListView优化>

    之前我们说到ListView的基本用法.但是,有很多的时候会额外的占用一些内存,从而消耗了性能.既然有消耗性能的可能,那么我们就对其做出相应的优化 我们首先来说说优化的步骤: 第一步.将宽和高设置为填 ...

  2. org.apache.hadoop.fs-PositionedReadable

    package org.apache.hadoop.fs; import java.io.*; import org.apache.hadoop.fs.*; /** Stream that permi ...

  3. Storm中并发程度的理解

    Storm中涉及到了很多组件,例如nimbus,supervisor等等,在参考了这两篇文章之后,对这个有了更好的理解. Understanding the parallelism of a Stor ...

  4. [XBee] ZigBee学习笔记

    转自:http://blog.csdn.net/wanghanjiett/article/details/6931867 几个重要概念: node(节点): 在zigbee堆栈中最多有三种节点:Coo ...

  5. [课程相关]homework-08

    一.变量作用域和生命周期 #include <cstdlib> #include <iostream> using namespace std; void try_change ...

  6. GIT免密码PUSH

    摘自:dudu 备忘,感谢! 1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图: 2. 在“开始>运行”中打开%Home%,新建一个名为“_netrc”的 ...

  7. hdu 3440 差分约束

    看完题目第一遍,感觉很简单.当写完程序跑测试用例的时候,发现第二个总是过不了,然后好好研究了一下测试用例,才知道原来不是程序有问题,而是我的建图方式错了.对于这些无序的点,如果高的在右边,不等式是di ...

  8. 关于Merge的整理--AndroidScreenSlidePager开源库中用到的

    在做AndroidScreenSlidePager开源库练习demo的时候,发现布局文件使用的是<merge>标签而不是<FrameLayout>标签.作者给出的说法是:Cir ...

  9. ubuntu qt :-1: error cannot find lgl

    安装package "libgl1-mesa-dev": sudo apt-get install libgl1-mesa-dev 参考文献: Qt: can't find -lG ...

  10. PHP之自定义会话控制---使用文件处理

    前三篇简单的总结了下会话控制和文件操作,这一篇说说会话控制的自定义处理方式.既然知道了文件的基本读写,而且在会话控制中,也有人提到,session数据可以保存到缓存或数据库中,实际上当然不会是直接利用 ...