用C++Builder开发具有历史记录功能的编辑控件


主页:http://www.maxss.net
邮件:maxchou@163.com


通过开发这个组件可以学会:
  * 捕获Windows消息
  * 开发自定义的BCB组件
  * 学习更多VCL的知识

  前段时间在做毕业是为了实现一个类似的功能,同时为更深入学习组件的编写技术,所以就自己动手进行开发。其间发现了一些问题,后来通过阅读VCL的源码解决了。这篇文章向大家有针对性地进行介绍在BCB中的组件开发,希望可以对大家的有所启发。现在这个称为THistoryEdit的组件已经被加入到我的Maxspace Studio Component Library(MSSCL)的界面分类中,这是我免费提供的一个BCB组件包,同时提供所有源码。要了解该组件库的详细信息请访问我主页的C/C++栏目:http://www.maxss.net/cc

  至于如何在C++Builder中创建组件,请看另一篇文章“使用C++Builder创建自定义VCL组件时的一些问题

  因为这个组件主要的作用还是数据输入,只是附加了一个可以记录输入历史的功能,所以我就直接从TCustomEdit类里继承一个新的类,我在这里称它为THistoryEdit,另外还要有一个用于保存输入历史的列表对象,我把它分成两个对象,一个是用来存储输入历史,另一个是用于显示输入历史并与用户进行交互。所以,我选择使用TStringList来存储输入历史,用TListBox来显示输入历史并与用户进行交互,使用对象组合的设计思想把它作为THistoryEdit的成员变量。

  然后就要为它定义特有的属性、方法及事件了。虽然输入历史只作为内部使用的数据就行,但为了使该组件可以提供更实用的功能,我就设计了一个TStringsList类型的属性History,通过它可以读取所有的输入历史内容。考虑到输入历史可能有存储与重现的需求,因此我就设计了两个方法,分别是LoadFromFile(FileName)和SaveToFile(FileName),这两个方法以INI的文件格式实现对输入历史的保存与重现。另外增加一个OnHistoryListBoxShow的事件,当输入历史框出现时就会触发这个事件,这样THistoryEdit在设计上已经拥有了比较完善和灵活的功能。

  然后就是一些细节的处理问题了。如组合对象的创建、消息处理和内部程序逻辑等。

  要在从TControl继承的组件中创建组合对象,如THistoryEdit中用于显示输入历史并与用户进行交互的TListBox时,必须重载TControl::SetParent(TWinControl* AParent),如果不重载该函数的就会在创建THistoryEdit对象时发生找不到Parent等的错误。

  在THistoryEdit获得焦点并编辑框的内容为空时显示输入历史框(如果输入历史条数大于0),或失去焦点的时候输入历史列表应该要消失(如果已显示),所以捕获这些相关的Windows消息(WM_SETFOCUS, WM_KILLFOCUS...)后进行处理。

  这篇文章就先写到这里吧,大家看着源码并对照着上面的设计来了解THistoryEdit的实现吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Report Machine 2.6<br>===================<br><br>这是一个报表件包,For Borland Delphi Versions 3,4,5,6,7.100% 源码.<br><br>最后更新日期:2002.10.11<br><br>目录<br>-----<br> 说明<br> 特点<br> 最后更新<br> 历史<br> 安装<br> Demo程序<br> 版权说明<br> 注册<br><br>1.说明<br>----<br> Report Machine是一个报表件包, Report Machine is reporting <br> tool component. It consists of report engine,designer and preview. Its capabilities <br> comparable with in QuickReport,ReportBuilder. It written on 100% Object Pascal <br> and can be installed in Delphi 2/3/4/5/6 and C++Builder 1/3/4/5/6.<br><br>2.特点<br>----<br> 复杂的报表?在report machine面前,还会有什么复杂的报表存在吗?<br>不,不会有的,因为这是一个功能强大,完全自动化、完全自由设计的报表件。<br>对于一般的主从表,单表,你甚至只需要点动鼠标次数=你的数据字段个数就可以<br>完成一个完全自定义的,并且支持用户进行格式修改加工,重新设计格式的报表!<br>想想fast report 吧,report machine会fast report会的,还会它不会的!<br>这是一个完全中文化报表件,支持delphi3到delphi6,BCB3到BCB6。<br>它的最大优点就是:强大与自由!<br> <br> report machine目前主要能做的:<br> 一、支持屏幕打印,制方法多样,可以打印全部rxlib件<br>全部InfoPower件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book,<br>TDecisionGrid等等众多件。<br> 二、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位<br>置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发<br>一个报表只需几分钟的时间。<br> 三、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成<br>报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印,<br>而不需要数据库。<br> 四、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。<br> 五、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问件,可以<br>通过这些开发独立的报表制作工具。其使用方法和delphi中的件是一样的。<br> 六、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的<br>地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分<br>组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。<br> 七、完全支持d3--d6,c3--c6。<br> 八、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程<br>序脚本,以制、或实现更复杂的打印效果。<br>九、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。<br> 十、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。<br> 十一、多种格式转换,可以把做出的报表转换为html,xml,bmp,jpeg等等格式。<br> 十二、自动对超长记录折行,超长的内容也会自动折行。<br> 十三、最新增加GridView,类似于电子表格,非常非常适合制作复杂报表<br><br> 最新更新和问题解答请访问论坛:www.pcjingning.com<br><br>3.最后更新<br>--------<br> v.2.2(Build 2002/01/28)<br> - 完善缩放打印功能<br> - TRMCrossView去掉一些BUG<br> <br> v.2.2(Build 2002/01/11)<br> - 增加缩放打印功能,<br> - TRMFormReport打印StringGrid,DBGrid等Grid时,对超宽Grid增加分页功能,<br> - MemoView增加属性CalcValue,可以访问MemoView中的内容,<br> - CalcMemoView增加TotalCalc属性,现在CalcMemoView科轻松实现页小计,页累计,<br> 页总计,并且可以放在页头,栏目头,分组头,数据头。<br><br> v.2.2(Build 2001/12/10)<br> - 修正一些BUG,<br> - 增加了导出到BMP,GIF,JPEG文件功能,<br> - Designer增加最近打开文件功能,<br> - 添加字段的时候可以选择不要在字段名前附加表名。<br><br> v.2.1(Build 2001/11/29)<br> - 修正了几个BUG.<br><br> v.2.1(Build 2001/11/22)<br> - 修正了几个BUG.<br> - 增加多语言功能.<br><br> v.2.1(Build 2001/11/15)<br> - 修正了几个BUG.<br><br> v.2.1(Build 2001/11/12)<br> - TRMBandView增加属性LinesPerPage,可以设置每页打印记录数,<br> - TRMBandView增加属性PrintColFirst,当Column>1时,可以选择先列后行还是<br> 先行后列打印,<br> - 修正没有安装打印机时的错误,<br> - 打印预览功能有些改变和增强.<br><br> v.2.1(Build 2001/11/07)<br> - EHLib可以打印Footer了,<br> - TRMFormReport增加分组功能,<br> - TRMCalcMemoView可以放在GroupHeader上了,<br> - TRMCalcMemoView增加Filter属性,之计算满足条件的纪录,<br> - 其他一些细节上的改变.<br><br> v.2.1(Build 2001/11/01)<br> - TRMFormReport中增加了数据对齐方式,数据显示格式.<br><br> v.2.1(Build 2001/10/30)<br> - 修正预览时,页面设置的错误.<br><br> v.2.1(Build 2001/10/25)<br> - TRMFormReport可以打印Rx,InfowPower全系列件,<br> - TRMFormReport可以打印EHLib,<br> - 可以打印多个PageFooter,方便制作页小计.<br><br> v.2.1(Build 2001/10/18)<br> - 大大增强了TRMFormReport功能,可以与ScreenReport,<br> Dev ExpressPrinting System媲美;<br> - TRMFormReport增加了表格的自动缩放功能.可根据纸张的大小自动进行水平或<br> 垂直方向的表格缩放.也就是说程序员不必再为迁就打印宽度和高度而反复调<br> 整屏幕格式和字体大小,而且对于屏幕上带横向滚动杆的任意超宽表格都可以<br> 缩放到指定大小的纸上.再也不用考虑打印超出纸张的问题了,也不会为迁就<br> 打印而影响屏幕格式的美观而感到遗憾!使得表格打印更直接更方便,最大程<br> 度地减少您的工作量;<br> - TRMFormReport增加一个事件OnPrintObject,在这个事件内程序员可自行编制<br> TRMFormReport不直接支持打印的任意件;<br> - 请注意:TRMDBGridReport,TRMwwDBGridReport等已不再维护,因为TRMFormReport<br> 具有以上几个GridReport的所有功能,并且更强.<br><br> v.2.1(Build 2001/10/08)<br> - 改掉了几个BUG;<br> - 增加TRMAngledLabel,可以打印倾斜角度的文字;<br> - TRMGridReport,TRMFormReport等做了一些改进.<br><br> v.2.1(Build 2001/09/25)<br> - 改掉了几个BUG;<br> - 背景图片增加Top,Left属性;<br> - TRMPictureView增加支持GIF格式图片.<br><br> v.2.1(Build 2001/09/21)<br> - 增加TRMStringGridReport,直接打印TStringGrid,TDrawGrid等继承自TCustomGrid的Grid;<br> - 增加TRMDecisionGridReport,直接打印TDecisitonGrid;<br> - 增加背景图片功能,可以实现套打.<br><br> v.2.1(Build 2001/09/17)<br> - 修正TRMOLEView只能缩放显示的错误,现在可以按实际大小,居中等显示.<br> - 增加TRXWWRichView,可以打印InfowPowwer中的TwwDBRichView.<br><br> v.2.1(Build 2001/09/14)<br> - 修正TRMRxRichView插入字段的错误.<br><br> v2.1<br> - 改掉一些BUG<br> - 增加属性PrintFrame,PrintVisible,可以实现套打;<br> - 报表增加选项(布缩放边框宽度),可以防止表格线变粗;<br> - Printer单元作了大量修改,Windows2000下支持自定义纸张.<br><br> v1.1<br> - 对DataManger作了大量修改,现支持各种数据存取件(直接支持BDE,ADO,IBX,Diamond);<br> - 增加Query Designer;<br> - 增加Report Explorer.<br> <br> v1.0 Preview 4<br> - Bug fixes;<br> - Added RX DateEdit control to the Dialog controls;<br> - Added possibility to excluding particular dataset or entire datamodule from<br> all db-related lists (see TfrDataDictionary.DisabledDatasets and code<br> of main demo);<br> - Added OnBeforePrint property to the report page (see Object Inspector) and<br> OnActivate event to the dialog form;<br> - Now you can tune export options in the export components (TfrTextExport and<br> etc);<br> - TRMFormReport做了修改,可以增加TRMFormReport不支持的件;<br> - 其它功能增强或修改.<br><br> v1.0 Preview 3.<br> - Bug fixes;<br> - Added Data dictionary;<br> - Some changes in interface;<br> - 增加Auto Append Blank<br> - TGridReport(TwwGridReport)改进,支持颜色,对齐方式.下一版本将支持分组,合计功能.<br> - 下一版本将增加一个组件TFormReport,直接打印Form,类似于Screen Report.<br><br> v1.0 Preview 2. <br> - Fixed old bugs, added new;<br> - 一些性能改善;<br> - 对备注内容处理更完善;<br> - Added mouse wheel support in designer and preview (D4 and above);<br> - Object Inspector now looks like Delphi OI;<br> - Added expression builder;<br> - More options for "Text" object: line and char spacing, top and left gaps,<br> "Suppress repeated values" option; (可是设置行距,字距)<br> - Now you can turn off variable processing in the "Text" and "RichText"<br> objects. See "Text only" option of these objects;<br> - Added TRMReport.OnObjectClick event. This event fires when user clicks on<br> any object when previewing report;<br> - Added new Child band;<br> - Improved export filters (frames export in TXT, tables in RTF, pictures<br> in HTML); added more export options;<br> - Added paper bins support;<br> - Added component for printing table;<br> - Added "Columns" property for data-bands. See last report in the demo;<br> - Code changed: TfrReport.OnEnterRect now called OnBeforePrint;<br> - Added TRMDesigner.OnLoadReport, OnSaveReport and CloseQuery properties.<br><br>4.历史记录<br>--------<br> 2001.08.30<br> Report Machine 2.1<br><br> 2000.05.10<br> Report Machine 1.1<br><br> 2000.03.17<br> Report Machine 1.0正式版<br><br> 2000.02.21<br> Report Machine 1.0 Preview 3. <br> <br> 2000.02.12<br> Report Machine 1.0 Preview 2. <br><br> 2000.01.25<br> Report Machine 1.0 Preview 1. Report Machine的第一版.<br><br>5.安装<br>-----<br> 1.如果没有安装RxLib 2.60及以上版本,请打开RM.INC文件,<br> 将"{$DEFINE RX}"改为"\\{$DEFINE RX}"<br><br> 2.如果没有安装InfoPower及以上版本,请打开RM.INC文件,<br> 将"{$DEFINE InfoPower}"改为"\\{$DEFINE InfoPower}"<br><br> 3.Delphi 6.X<br> 从Delphi IDE中卸载以前的Report Machine版本。<br> 打开菜单"File\Open..."打开DclRMachine6.DPK,选择"Install"<br><br> 4.Delphi 5.X<br> 从Delphi IDE中卸载以前的Report Machine版本。<br> 打开菜单"File\Open..."打开DclRMachine5.DPK,选择"Install"<br><br> 5.Delphi 4.X<br> 从Delphi IDE中卸载以前的Report Machine版本。<br> 打开所有的DFM文件,选择保存。(因为我是在Delphi 5.0中完成的,DFM文件<br> 与4.X有些不兼容)<br><br> 打开菜单"File\Open..."打开DclRMachine4.DPK,选择"Install"<br><br> 6.Delphi 4.X<br> 从Delphi IDE中卸载以前的Report Machine版本。<br> 打开所有的DFM文件,选择保存。(因为我是在Delphi 5.0中完成的,DFM文件<br> 与3.X有些不兼容)<br><br> 打开菜单"File\Open..."打开DclRMachine3.DPK,选择"Install"<br><br>6.Demo程序<br>---------<br> Report Machine包含一些例子,这是学习使用Report Machine的最快途径。<br><br> http://rmachine.8u8.com/download/demos.rar <br> 需要用BDE Administrator建立一个Database Alias: <br> 名称: RMachineDemo<br> Path: <br><br>7.付费<br>------------------<br> Report Machine是共享件,如果你做了东西,赚到了money,并且认为Report Machine还不错,请赞助我,<br>以便作者有动力开发出更好的产品,如果只是拿来玩玩,不需注册. <br><br> 参考价格:(这只是参考价格,多少你看着办)<br> 个人:70元人民币<br> 公司:290元人民币<br><br> 网上付费:http://rmachine.y365.com/html/register.htm<br> 汇款地址:天津市蓟县供电局计算站 王海丰 301900<br><br>如果你在使用中有什么问题或建议,或发现BUG,请与作者联系,谢谢!!!<br><br> Report Machine WWW:<br> http://rmachine.yeah.net<br> http://reportmachine.delphibbs.com<br><br> 作者:<br> [email protected]<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值