实例讲解如何在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下载
版权声明:本文为博主原创文章,未经博主允许不得转载。
实例讲解如何在Delphi中动态创建dxBarManager内容的更多相关文章
- Delphi中动态创建窗体有四种方式
Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...
- 在DELPHI中动态创建控件以及控件的事件
在DELPHI中我们经常要动态的创建控件以及控件的事件.例如,我们可能想根据程序需要动态的创建一些Tshape组件来创建某个图形,并使得在鼠标移动上去之后可以完成某些操作.这一般需要需要三步: 生成一 ...
- Delphi 中 动态创建的Panel无法改变颜色的解决办法
刚开始代码如下: procedure TForm1.Button1Click(Sender: TObject); var Panel: TPanel; begin Panel := TPanel.Cr ...
- Delphi中动态创建的Panel无法改变颜色的解决办法(要把Panel的ParentBackground设为False)
刚开始代码如下: procedure TForm1.Button1Click(Sender: TObject); var Panel: TPanel; begin Panel := TPanel.Cr ...
- 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号
在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...
- 如何在Delphi中调用VC6.0开发的COM
上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过. ...
- 如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值
如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值:比如 输入 单价,数量,计算金额. 参考: 1. 输入 单价,数量,计算金额 ...
- WPF 中动态创建和删除控件
原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindName(" ...
- 在ASP.NET中动态加载内容(用户控件和模板)
在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<tab ...
随机推荐
- [Oracle AR]Territory Flexfield
You can use the Territory Flexfield for recording and customized reporting on your territory informa ...
- linux cd
cd -回到上一次 操作的目录 cd ..回到上级目录 cd ../../回到上两级目录
- IntelliJ IDEA使用之快捷键
1. 自动完成代码 要完成代码 只需使用 Set<SSHConfig> sshConfigs = webConfig.getSshConfigs(); webConfig.getSshCo ...
- linux-redhat5找回root密码
我在虚拟机里装了个redhat(RedhatEnterpriseLinuxASv5.4-x64),也不经常用,偶尔进去用用吧,又把密码忘记了,哎...脑子不好使啊 不知道像ubuntu是不是一样的,还 ...
- [改善Java代码]在明确的场景下,为集合指定初始容量
我们经常使用ArrayList,Vector,Hashmap等集合,一般都是直接用new跟上类名声明出一个集合来,然后使用add,remove,等方法进行操作,而且因为它们是自动管理长度的,所以不用我 ...
- linux nginx启动 重启 关闭命令
启动操作 nginx -c /usr/local/nginx/conf/nginx.conf -c参数指定了要加载的nginx配置文件路径 停止操作停止操作是通过向nginx进程发送信号来进行的 步骤 ...
- mysql数据库千万级别数据的查询优化和分页测试
原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰 本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.com. ...
- React Native 实现MQTT 推送调研 (1)
一.推送几种实现方式: (1)通过SMS(Short Message Service,短信群发服务系统) 进行服务器端和客户端的交流通信.在Android平台上,可以通过拦截SMS消息并解析内容来了解 ...
- js获取网页高度(详细整理)
网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document.body.offset ...
- AngularJS 整理资料
AngularJS是Google开源的一款JavaScript MVC框架,弥补了HTML在构建应用方面的不足,其通过使用指令(directives)结构来扩展HTML词汇,使开发者可以使用HTML来 ...