一、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. 小白日记26:kali渗透测试之提权(六)--收集敏感信息,隐藏痕迹

    提权后操作 提权之后,要收集目标系统的重要信息LINUX /etc/resolv.conf       #查看DNS配置,是否可以进行DNS篡改或劫持 /etc/passwd         #存放账 ...

  2. Android(java)学习笔记115:Android InputMethodManager输入法简介

    正文 一.结构 public final class InputMethodManager extends Object Java.lang.Object android.view.inputmeth ...

  3. Javascript与Ajax

    不使用jquery来处理ajax请求该怎么做? 首先要明确html中的某些数据需要从服务端获得,也就是客户端向服务端请求(request)数据,服务端就响应(response)这个请求,把客户端要的数 ...

  4. sql 自定义函数--十进制转二进制

    随笔记忆: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DECTOBIN]') and xtype in ...

  5. sql语句判断方法之一

    sql语句判断方法之一CASE语句用法总结 背景: Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN ' ...

  6. Java Classloader原理分析

       类的加载过程指通过一个类的全限定名来获取描述此类的二进制字节流,并将其转化为方法区的数据结构,进而生成一个java.lang.Class对象作为方法区这个类各种数据访问的入口.这个过程通过Jav ...

  7. Sherlock and The Beast

    Sherlock Holmes suspects his archenemy, Professor Moriarty, is once again plotting something diaboli ...

  8. 核心概念 —— 服务提供者

    1.简介 服务提供者是Laravel应用启动的中心,你自己的应用以及所有Laravel的核心服务都是通过服务提供者启动. 但是,我们所谓的"启动"指的是什么?通常,这意味着注册事物 ...

  9. ASP.NET二级域名站点共享Session状态

    我的前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态, http://www.cnblogs.com/jzywh/archive/2007 ...

  10. kettle列转行