C++ Builder中采用DevExpressVCL控件开发浅析

时间:2022-09-27 12:15:26

C++ Builder中采用DevExpressVCL控件开发浅析

摘要:阐述DevExpress VCL控件在C++ Builder下的安装、编译及使用。通过采用该控件中强大的Grid组件,实现数据库开发中复杂表单的设计,采用Ribbon组件,实现最新的Office Ribbon界面,增强开发软件的用户操作性。

关键词:C++ Builder;DevExpress;Ribbon;Grid

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)16-3782-07

在Windows平台Win32软件开发领域,由于Microsoft的大力推广及不断更新,Visual Studio系列可以说是目前最为流行的开发平台。当然,任何领域都不可能只有一家独大,在软件开发工具的进化历史长河中,有家公司一直与Microsoft竞争,那就是Borland软件公司。但随着Microsoft在Visual Studio系列上的逐渐发力,Borland的竞争逐渐处于下风,最终将开发工具业务出售给现在的Embarcadero,Embarcadero将Delphi和C++ Builder等开发工具放在一起称为RAD Studio。近几年,虽然Embarcadero不断推陈出新,几乎每年升级RAD Studio,无奈市场占有率不断下降,但这并不能否定目前最新版本的RAD Studio XE6是非常优秀的开发工具。

笔者从Delphi 5.0时代开始,一直使用C++ Builder 作为主要开发工具,现在使用的版本是C++ Builder 2010。RAD Studio从2009版本开始,几乎每年一升级,经历了2010、XE、XE2、XE3、XE4,直到目前最新的XE6,最新版本支持原生Android移动平台开发,有很大发展前景。由于目前我的工作基本上只用到Windows平台,所以一直使用的是2010版本。

在Delphi和C++ Builder开发领域,有一款重量级的开发控件,那就是DevExpress公司开发的用于Delphi与C++ Builder的DevExpress VCL Controls。这套控件功能十分强大,涵盖了界面设计、数据表单等方方面面。由于功能的强大,也造成这套控件的使用也非常复杂,该文就从这套控件在C++ Builder中的安装开始,对它在开发使用过程中的一些技巧及问题做一阐述。

1 DevExpress VCL Controls的编译与安装

DevExpress VCL Controls的版本更新很快,每当RAD Studio新版本,DevExpress都会及时跟进,使自己的控件能够兼容最新的Delphi和C++ Builder。目前官网上最新的版本是13.2,支持C++ Builder 2007至最新的C++ Builder XE6,而我们能够从网上获取到的最新版本为13.1.4。该控件的很多版本分为多种安装格式,最完整的是第三方制作的带源码、实例及帮助的完整版安装程序,只需要一步步安装即可,非常方便;但另外一种是只有源代码、实例,而没有安装程序。这种只有源代码的包安装起来很复杂,因为整个DevExpress VCL包含超过180个控件,将近30个package,需要在C++ Builder中将每个package的源代码编译安装,且有一定的安装顺序。这个编译安装过程相当繁琐,造成每次需要安装DevExpress VCL的过程经常出现问题。

笔者依据近几年开发的经验,参考Delphi的dcc32编译器的详细使用帮助,采用命令行编译的方式,将每个package用dcc32进行命令行编译,代码格式如下:

dcc32.exe "..\..\ExpressCore Library\Packages\dxCoreRS14.dpk" -JL -B -U"..\..\ExpressCore Library\Sources;..\..\Library\RS14" -R"..\..\ExpressCore Library\Sources" -N"." -LE"." -LN"." -NH"." -NO"."

这条编译命令中所用到的参数说明:

-JL = 生成C++需要的 .lib,.bpi以及所有的.hpp文件

-B = 编译所有单元文件

-U = 单元文件所在目录

-R = 资源文件所在目录(dcr等文件)

-LE = .bpl文件输出目录

-LN = .dcp文件输出目录

-NH = .hpp文件输出目录

-NO = .obj文件输出目录

其中所有的输出文件指定的目录都是“.”,表示该批处理文件运行时所在的目录,方便最后C++ Builder进行开发时,搜索需要的各种文件。

这是单个dpk文件的编译命令,将所有的dpk文件编译命令生成一个批处理,就可以通过运行该批处理文件,一次性将所有的dpk文件编译完成。在批处理中,由于各个dpk之间的相互依赖关系,有一定的先后顺序,经过测试,确定了整个DevExpress VCL控件编译的顺序,保证所有控件都能正常编译,生成的批处理文件如图1所示:

将下载获取的DevExpress VCL控件源码包解压,复制到自己想要存放的目录,笔者参考自动安装程序的目录,存放到Program Files(x86)\DevExpress VCL,并且在该目录下创建Library\RS14,用于RAD Studio 2010版本的编译后的文件存放,这样方便识别,如果想要编译其他版本,就创建RS15等等其他目录。将我自己创建的批处理文件manuinstallRS14.bat复制到RS14,以管理员身份运行command命令,执行该批处理,稍等片刻,所有的控件就编译好了,文件都生成在RS14目录。

运行C++ Builder 2010,进入Install Packages,添加编译生成的所有以dcl开头的bpl控件,这是设计时控件,这样DevExpress VCL就全部安装完成,可以在C++ Builder中看到这些控件。后面还要在Options中设置软件开发中使用这些控件的编译路径,这个一般程序员都应该清楚,就不多说了。

2 DevExpress VCL中Ribbon控件的使用

DevExpress VCL这套控件包中有超过180个控件,几乎涵盖了软件开发过程中界面设计的方方面面,可以说,有了这套控件,基本上可以不需要安装其他第三方控件。其中的Ribbon控件就是用于开发Ribbon界面的有力工具,Microsoft自从2007年Office2007后,其标志性的Office Ribbon界面目前已成为流行软件开发的标准UI,现在许多软件的操作界面都采用Ribbon,包括现在最新的Win8/Win8.1系统,很多地方都已经集成Ribbon操作。RAD Studio从2009版本开始也自带了Ribbon控件,但是自带的这个控件使用起来很麻烦,而且功能不强,比起DevExpress VCL中的Ribbon控件有很大的差距。下面以笔者自己写的几个软件为例,简单介绍一下Ribbon控件的开发使用。

Ribbon控件位于ExpressBars分类中,名称显示为TdxRibbon,TdxRibbon要与TdxBarManager配合使用,先将一个TdxBarManager放置于Form上,然后放置TdxRibbon,TdxRibbon会自动与TdxBarManager关联,缺省情况下,Ribbon栏只有一个Tab,且是Office 2007 Ribbon的风格,一般与Ribbon相配合的还有一个TdxRibbonStatusBar,也放在Form上即可。很简单的三步,一个Ribbon界面的Form即设计好了。在缺省的Tab上面点击右键,就会弹出右键菜单,可以增加或者删除Tab,可以增加Group。每个Tab就是Ribbon栏上一个选项卡,每个选项卡下面可以增加多个Group,在Group中创建各种工具按钮。如下图所示,就是一个简单的Ribbon空界面。在Ribbon控件的属性设置中,有个Style属性,可以设置Office 2007、2010、2013这三种风格。2007与2010的设置还不一样,我们选择2010即可。在现在这个阶段,Ribbon界面左边的那个File菜单还没有出现,对于2010的风格,我们需要放置TdxRibbonBackstageView控件,将TdxRibbon属性中ApplicationButton下Menu关联至TdxRibbonBackstageView,Text属性中输入菜单显示的文字,比如File,同时,在TdxBarManager中创建一个ToolBar,将TdxRibbon的QuickAccessToolbar属性下的Toobar属性关联至这个新创建的Toolbar,这样,Ribbon的菜单就出来了。运行一下这个程序,就可以看到如图2的界面了。

这时候,你会发现一个小小的问题,那就是Windows系统自己的标题栏还是存在的,而真正的Ribbon界面程序,是没有这个标题栏的。这个问题笔者是参考Devexpress提供的demo解决的,首先将TdxRibbon的SurpportNonClientDrawing属性设为true,然后修改该Form创建的基类。即将BCB缺省创建的基类class TForm1 : public TForm,修改为class TForm1 : public TdxCustomRibbonForm,重新编译运行,是不是成功了?

由于Ribbon栏上面众多的Group,每个Group中又有众多的按钮,所以,需要我们在TdxBarManaager控件中详细分类设置好每个Tab,每个Group中对应的按钮,这是个细活,不能着急。以上就是TdxRibbon控件的关键几个问题,注意这几个问题,整个Ribbon界面就搭建好了,其他的Tab栏上面各种按钮控件一个个试用一下即可掌握使用方法。

3 DevExpress VCL中TcxGrid控件的使用

用到DevExpress VCL的控件,我们就不得不提到其中的TcxGrid控件,笔者最初就是从使用这个强大的Grid表格控件开始的。

3.1 TcxGrid基础应用

使用TcxGrid控件创建一个表格应用很简单,首先设置好连接数据库的各种控件,根据连接方式的不同,有不同的设置方法,比如,笔者使用的是ADO连接SQL Server,这也是数据库开发常用的一种方式,设置好TADOQuery和TDataSource控件,将TcxGrid放置在Form上,TcxGrid控件中有两个概念需要理清:Level和View。Level相当于TcxGrid自带的PageControl控件,每个Level下链接一个View,这个View就是具体的表格。图3就是基础的TcxGrid形态。

3.2 TcxGrid分组统计功能

TcxGrid自带很多强大的功能,比如汇总、分组查询,可以得到强大的统计功能。图4显示的是以“发货日期”为一级分组,“市县”为二级分组,这样就能显示某一天中,某个县详细的学校清单,县一级有合计,当天那一级也有合计,非常清楚明晰。

4 结束语

采用Devexpress的控件解决方案,极大地提高了软件开发的效率,降低系统维护的复杂性,也同时降低了投资成本和后期管理成本,具有很高的实用性。该文主要针对支持Delphi与C++ Builder的VCL控件进行介绍,Devexpress的控件,尤其是TcxGrid还有深入的开发方法,需要更深层次的使用与挖掘。

参考文献:

[1] 陈宽达. C++ Builder深度历险[M]. 上海:华中科技大学出版社,2002.

[2] Satya Sai Kolachina.C++Builder6 Developer’s Guide[M]. Wordware Publishing, Inc,2003.

上一篇:零等待安全便捷快递派发系统设计 下一篇:NAT444技术实现向IPv6网络平滑演进