一、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. XML 之 与Json或String的相互转换

    1.XML与String的相互转换 [1] XML 转为 String //载入Xml文件 XmlDocument xdoc = new XmlDocument(); xdoc.Load(" ...

  2. jQuery之父:每天都写点代码

    去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上. 这些项目遇到了一些严重的问题.之前的工作我主要是在周末,有 ...

  3. 前端必会css整理

    1.设置css样式的三种方式?         外部样式表,引入一个外部css文件         内部样式表,将css代码放在<head>标签内部         内联样式,将css样式 ...

  4. python(3)-函数动态参数

    先来看一段代码 def show(*arg): print(arg, type(arg)) if __name__ == "__main__": show(1) show(1,2, ...

  5. [改善Java代码]建议40:匿名类的构造函数很特殊

    建议40: 匿名类的构造函数很特殊 在上一个建议中我们讲到匿名类虽然没有名字,但可以有一个初始化块来充当构造函数,那这个构造函数是否就和普通的构造函数完全一样呢?我们来看一个例子,设计一个计算器,进行 ...

  6. poj 3352 边连通分量

    思路与poj3177一模一样. #include<iostream> #include<cstdio> #include<cstring> #include< ...

  7. Angular 2.0 从0到1:Rx--隐藏在Angular 2.x中利剑

    第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节: ...

  8. oracle中比较两表表结构差异和数据差异的方法

    在工作中需要完成这么一个需求:比较两个表的表结构是否形相同,并找出差异.比较两个表中的数据是否相同,并找出差异数据?    分析:由于表结构中字段比较多,手工比较很浪费时间,而且不能保证不出错误.对于 ...

  9. JSP之初识

    JSP是“java server pages”的缩写,java是一种编程语言,jsp只是相当于java里面的servlet部分,所以JSP技术是以Java语言作为脚本语言的. JSP这门技术的最大的特 ...

  10. android输入框显示在软键盘上边

    有时候在界面需要输入的时候,如果输入框在界面的下方,软键盘弹出的时候会遮挡输入框界面,对用户的体验不是很好. 在网上找的别人的解决方案 首先: 清单文件里面配置:android:windowSoftI ...