




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-本文为网络收集精选范文、公文、论文、和其他应用文档,如需本文,请下载-报表的插件技术及其动态设计的论文本文从网络收集而来,上传到平台为了帮到更多的人,如果您需要使用本文档,请点击下载按钮下载本文档(有偿下载),另外祝您生活愉快,工作顺利,万事如意!作者:瞿有甜 童宝军 丁健龙 论文 关健词:插件技术多模板技术 动态生成技术 动态报表 论文摘要:介绍一种荩十插件技术、辅之以多模板技术和动态生成技术的动态报表设计方法,并可实现与mis无缝衔接。从而使mis开发的高效性、灵活性、可扩展性以及报表设计过程的简易性和智能化程度均有明显改善和提高。 针对传统mis系统开发过程中报表设计繁琐、低效等弊端,提出了一种全新的报表设计思想,就是以插件技术为主,以多模板技术为辅,结合报表动态生成技术,来实现对报表的动态制作。对于企事业单位的数据库中的任何数据,可以利用本插件直接进行报表的设计并实现报表数据的输出,当然也可以通过该插件生成报表模板并与用户的mis系统实现无缝的衔接。所以本插件既可以独立于mis系统单独使用,也可以作为报表制作工具辅助软件开发人员进行报表程序的设计,以提高软件开发的效率。该插件对于遗产软件进行报表功能扩充能发挥其独到的作用。 l设计思想 这种新的报表设计综合了多种动态设计思想,充分体现了报表没计中的灵活性和动态性,使报表的没计思想有了新的 发展 ,从而大大加快了mis系统的开发速度。 (1)插件技术为主很多的著名应用软件都采用了这项技术,如adobephotoshop、macromediadreamweaver等,它们都是利用这项技术来提高系统的灵活性和可扩展性。 (2)多模板技术为辅多模板技术也是 现代 应用软件的一贯技巧,它的出现是为了满足用户不同的心理、兴趣以及不同的需求变化。用户可以根据自己的需要来选择自己喜欢的模板,这样就再一次扩展了系统的功能。 (3)结合动态生成技术动态生成技术即“所见即所得”技术,它能够给用户带来更多的直观性,简化了用户的操作,使用户可以在不需要进行任何培训的情况下,只需要用自己的主观逻辑去操作软件,就可以得到用户所需要的结果,这项技术不但给用户带来了方便,而且为程序员开发报表的时候,减少了工作量,缩短了开发时间,提高了工作效率。 2技术实现 现以基于组件技术、面向对象编程、可视化、有强大的数据库支持的灵活快速开发软件。以delphi为例,具体介绍一下插件技术、多模板技术以及报表的动态生成等技术在实际软件开发过程中的应用。 21系统结构设计 根据模块划分原则,本插件功能如下所示: (1)设置数据源:完成数据源设置工作; (2)报表模板设计:模板设计又分为直接设计和根据设计向导设计,考虑到数据源的问题,设计时又分单表模板没计和多表关联模板设计; (3)显示报表列表:显示报表信息。 22主要技术的实现 (1)插件调用示意图(见图1) 首先将报表单元文件通过编译,生成相应的插件文件,然后在开发应用系统的时候预留一个特殊的接口,就可以利用这个接口来调用插件文件。 (2)具体实现 插件是以特定的接口与父应用程序交互,这个接口可以根据应用的需要来定义。报表文件制作成相应的插件文件。应用程序在运行时就会自动检测插件目录,并将检测到的报表插件文件显示在插件列表中。如果没有插件,它就不会出现在已安装的插件列表中。插件通过loadplugin过程载入到这个应用程序中,这个过程在显示报表列表窗i:1的formcreate事件中调用。该过程使findfirst和findnext函数在应用程序所在目录中查找插件文件。每找到一个文件以后,就使用函数loadplugin过程将其载入。 loadplugin过程的部分函数代码如下: procedureloadplugin(sr:tsearchrec); type tpluginlnit=procedure(parentiist:tlistbox); stdcall; var libhandle:integer; initproc:tplugininit; begin libhandle:=loadlbrary(pchar(plug+srname); irlibhandle0then begin initproc:=getprocaddress(lbhandle,initplugin): irassigned(injtproc)then begin listbox2itemsaddfsrname); initproc(1istbox1); end else begin messagedlg(文件”+srname+不是一个合法的插件, mtlnformation,mbok,0): end; end else messagedlg(导入插件+srname+”时发生严重错误!, mterror,mbok,0): end; loadplugin方法展示了插件机制的核心。首先,插件被写成dll。其次,通过loadlibraryapi被动态地加载。一旦dll被加载,就需要一个访问它所包含的过程和函数的路径。api调用getprocaddress提供这种机制,它返回一个指向所需例程的指针。在这个简单的演示中,插件仅仅包含一个名为initplugin的过程,如果在dll中没有找到请求的例程,getprocaddress将返回n|l,这样就允许使用assigned函数测定返回值。 为了以一种易用的方式存储指向一个函数的指针,有必要为用到的变量创建一个特定的类型。注意,getprocaddress的返回值被存储在一个变量中,initproc属于tplugininit类型。下面是它的声明: type tplugininit=procedure(parentlist:tlistbox); stdcall; 由于过程存在于dll内部,它通过标准调用、转换,编译所有导出例程,因此需要使用stdcall指示字。这个过程使用一个var参数,当过程返回的时候它包含插件的描述。 要调用刚刚获得的过程,只需要使用保存地址的变量作为过程名,后面跟上任何参数。就本文的例子而言,声明:initproc(1istbox1);将会调用在插件中获得的相应过程,并且初始化报表列表框listbox1。 23构造报表插件 插件文件是一个标准的delphidll,dll文件不仅可以让delphi自身调用,而且也可以在vc+、vb等其它语言程序中轻松调用。虽然插件是一个dll文件,但是不一定要给它一个dll的扩展名。实际上,一个原因就足以让我们有理由改变扩展名,当父应用程序寻找要加载的文件时,新的扩展名可以作为特定的文件掩膜。通过使用别的扩展名(如trio)可以在一定程度上确信应用程序只会载入相应的文件。 例子插件的代码是比较简单的。部分关键程序代码在下面已经列出。此处initplugin原型与外壳应用程序中的tinitplugin类型应一致,使用附加的export保留字指定该过程将被导出。被导出的过程名称也将会出现在主工程源代码的exports段中。 unitusjxstbj; jnterface procedureinjtplugjn(parentljst:tlistbox);stdcall: 1mplementation procedureinitplugin(parentlist:tlistbox); begin parentlistitemsaddfbbname): end; 在测试这个插件之前,要先把它复制到相应的路径下(如plug)。最简单的办法就是在主目录的子目录下创建插件,然后把输出路径设置为主路径。 多模板技术也是动态设计中必不可少的一项技术,模板技术的实现,用户可以根据自己的需求进行取舍,扩大了用户的选择余地,不仅如此,这项技术还大大地增强了应用软件的通用性,以满足不断发展的需求。 本文所要介绍的多模板技术,是指在同一张报表中,使其具备多个样式模板,即用户可以按自己的需要设置报表的字段,并保存为rep文件,并在相应的ini文件中写入信息。本系统的模板技术的实现主要分为两个部分设计并保存板和调用模板(见图2)。 3报表动态生成技术的实现 报表动态生成技术是“所见即所得”技术的真实体现,是指报表数据已经准备完毕后,无须手动地去设计报表的排版。一切都是由相应的报表程序自动的按照需要生成报表模板,即将dbgrid中的数据集合直接映射为报表文件,并直接预览。真正做到了所见即所得,使用户界面更加直观,用程序来控制报表排版,更能准确地进行定位,使打印出的报表更加实用、美观。这样既大大节省了报表的设计时间,也提高了应用程序的易操作性。 (1)数据组织 数据组织层通过adoquery来向报表实现层传递打印数据。同时也通过adoquery向格式定义层的dbgrid和excel对象传递数据。为了实现报表打印的通用性和灵活性,在此提供一种数据的动态组织方案。该方法能灵活实现动态选择打印列、调整打印列顺序、加载数据(包括空列)到dbgrid中等功能。设计一个dataarrange类: type tdataarrange=class private proceduremoveup(clbfield:tflatchecklistbox);,记录上移 proceduremovedown(clbfield:tflatchecklistbox); 记录下移 procedurecheckall(clbfield:tflatchecklistbox) 选中所有选项 procedureadddata(clbfield:tflatchecklistbox; 向dbgrid加载数据 dbgrid1-tdbgrid;adoquery1:tadoquery); end; 其中adddata方法的实现函数如下f0ri:=0toclbfielditemscount-1do begin ifclb fieldcheckedithen begin dbgrid1columnsadd; dbgrid1co1umns【addcount】fieldname:=clbfieldhemsi; end; end; 该方法的好处是:因为用户对于报表数据的要求时有变化,程序员用adoquery组织的数据相对固定;所以需要提供比较灵活的用户接el。dataarrange正符合这种要求,既可以让用户自由选择打印数据字段,又可以自由调整打印先后顺序,此外还可以添加空数据列。 (2)格式定义 根据dbgrid中的列数、列宽、列标题、表格数据等信息,在报表实现层中运用treport、tqrshape、tqrdbtext、tqrlabel等类的create方法,动态地构造报表初步模型h】。鉴于单个报表的特殊性,可以设立不同的参数来描述不同的报表格式,从而实现普遍性与特殊性的完美结合。同时可以设计一个格式控制面板来设定这些参数,使用报据友好的操作界面实现各个表单的特殊需求,同时可以保存每次设定的格式以便重用。控制面板中具体的参数列表说明如下: (3)报表实现 通过数据组织层和格式定义层的工作,决定一张报表的数据和格式元素都已经确定,剩下的就是如何有效利用这些元素动态实现报表的功能。可以运用treport、tqrshape、tqrdb-text、tqrlabel等类的create方法,构造dbgriderepon(dbgrid:tdbgrid;inifilename:string)函数,动态创建报表打印组件,然后根据格式定义参数信息,来设定相关组件的格式属性参数,从而最终成功地创建所需报表。具体步骤如下: 1)根据保存报表格式定义参数的文件名inifilename,从ini文件中读入报表格式定义参数; 2)创建quickrepl并定义纸张类型以及纸张方向,并对数据库进行绑定; 3)根据dbgrid中的列名、数据列、列宽等信息,创建报表列标题和数据列; 4)使用tqrshapecreate(f_reportset_noini)分别创建表格顶部线条、列标题与数据列问的分隔线、数据列之间的分隔线,和表格底部线条,并设置其相关属性;5)使用tqrlabe1create(f_reportset_noini)分别创建报表主标题、副标题、页码标题、时间标题,同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电视节目制作流程及质量控制标准
- 仪表专业考试试题及答案
- 六一互动活动方案
- 六一儿童超市节活动方案
- 六一化妆观摩活动方案
- 六一幼儿园健康活动方案
- 六一摊位活动方案
- 六一未成年人活动方案
- 六一活动古筝活动方案
- 六一活动帐篷节活动方案
- 租赁国企用地合同范本
- DL∕T 2011-2019 大型发电机定子绕组现场更换处理试验规程
- 2024年江苏省南京玄武区八下英语期末考试试题含答案
- 从黄土高原视角品黄河生态变迁智慧树知到期末考试答案章节答案2024年西北工业大学
- 广东省东莞市2023-2024学年高二下学期7月期末英语试题
- 2024内蒙古森工集团第二批工作人员招聘【重点基础提升】模拟试题(共500题)附带答案详解
- 黑龙江省高校毕业生“三支一扶”计划招募笔试真题2021
- 河北省建设项目概算其他费用定额
- 肿瘤科护理组长竞聘
- 论马克思主义社会科学方法论在音乐中的意义
- 机动车驾驶员培训理论科目一考核题库完整版500题(含答案)
评论
0/150
提交评论