实例讲解如何在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 ...
随机推荐
- C#面向对象(一) 封装
一.什么叫做面向对象封装? 封装的概念:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 二.面向对象封装有什么好处(为什么要封装)? 封装的目的:是增强安全性和简化 ...
- SQL把做个字段组合成一个字符串
- arcgis mdb和gdb编辑区别
arcgis gdb保存时错误会提供行包含错误值:[DJH3],mdb不会,只会提示字段值太小
- Linux命令行下cp,rm,mv命令的使用
以下的内容来源于<鸟哥的私房菜> Linux命令行下的复制.删除与移动:cp,rm,mv cp(copy)复制 cp这个命令的用途很多,除了单纯的复制之外,还可以创建链接文件 ...
- poj 1679 次小生成树
次小生成树的求法: 1.Prime法 定义一个二维数组F[i][j]表示点i到点j在最小生成树中的路径上的最大权值.有个知识就是将一条不在最小生成树中的边Edge加入最小生成树时,树中要去掉的边就是E ...
- Ubuntu 14.0操作系统,修改默认打开方式的方法
Ubuntu 14.0 有内置的视频播放器 Totem,但是使用起来不太习惯,所以在系统的软件中心 下载了gnome Mplayer和s Mplayer,都有打开上次播放的忆功能,只是gnome Mp ...
- Java之绘制五环图案
前面已经介绍过绘制方法.这里不再赘述. package com.caiduping; import java.awt.BasicStroke; import java.awt.Color; impor ...
- Visual Studio的MethMVVM
MethMVVM介绍: Visual Studio Gallery是微软针对VisualStudio扩展提供的一种解决方案,在Visual Studio Gallery你能够找到各种不同主题的解决方案 ...
- (转) Crittercism: 在MongoDB上实现每天数十亿次请求
MongoDB的扩展能力可以满足你业务需求的增长——这也是为什么它的名字来源于单词humongous(极大的)的原因.当然,这并不是说你在 使用MongoDB的路上并不会碰到一些发展的痛点.Critt ...
- template_1
0: 模板是一些为多种类型而编写的函数和类,而且这些类型都没有指定.当使用模板的时候,只需要把所希望的类型作为一个(显示或隐示的)实参传递给模板.模板是语言本身所具有的特效,她完全支持类型检查和作用域 ...