说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi应用程序中中国式报表的制作

HTML文档下载 WORD文档下载 PDF文档下载
Delphi应用程序中中国式报表的制作

在众多可视化数据库开发工具中

Delphi以其真正的面向对象、高效率、支持多层结构应用开发、支持多层B/S结构开发等优良特性脱颖而出,成为广大编程人员的首选开发工具。

在数据库应用程序开发中,系统设计员、程序设计员需要考虑的一个重要问题是如何设计和输出报表,在Delphi中我们可以采用多种方案来解决这一问题,如运用OLE自动化技术将数据输出到MS-WORD、MS-EXCEL中等,但其中最直接、最本地化的还是使用Delphi3.0/40中的QuickReport报表组件,它是挪威QuSoft公司专门为Delphi编写的,使用QuickReport可以迅速设计出符合西方人习惯的报表。

然而,在设计中国式报表时,笔者发现在QuickReport中设计列与列之间的竖线和斜线比较困难;虽然QuickReport提供了TQShape控件

使用该控件可以画出列与列之间的竖线,但如果用户不能正确调整TQShape实例的高度,输出报表中的竖线不是不连续就是超长,另外如果我们调整了某个Band的高度,我们将不得不调整该Band下的所有TQShape实例的高度;至于斜线,QuickReport报表组件根本就没有提供这一功能。笔者认真查找了有关资料,成功地解决以上问题,并愿意将解决方法与大家共享,希望能对大家有所帮助。

1、 解决思路

(1)以TQShape为父类,建立新的控件,新控件可以画竖线、斜线和反斜线。

(2)重载TQShape 类的Paint方法,这样在设计阶段可以非常直观地画斜线、反斜线和竖线,用户可以在设计阶段选择线的类型,如果选择直线,控件自动将其高度调整为所属Band的高度,用户可以调整其横向位置但不能调整其高度;如果选择斜线,用户可以根据需要调整斜线的长度和倾角。

(3)重载TQShape 类的Print方法,这样可以在运行阶段输出直线和斜线。

说明:该控件只能画直线和斜线,如果读者需要画矩形和园,可以使用TQShape控件来实现。

2、控件设计步骤

(1)使用Delphi提供的控件向导,选择TQShape为父类,建立新类TMyQRShape,并选择适当的包(Package),最后生成单元文件。

(2)在生成的单元文件中,增加枚举类型,

TLines = ( None

TopBottom

BottomTop ) ;

None、TopBottom、BottomTop三种取值,分别代表直线、斜线 \ 和反斜线 / 。

(3)在新类TMyQRShape 中增加private 成员 FLineType:TLines ,增加published属性 LineType:TLines Read FLineType Write SetFLineType 。

(4)建立过程SetFLineType 。

procedure TMyQRShape.SetFLineType(Value:TLines);

begin

if Value<>FLineType then

begin

FLineType:=Value ;

Invalidate ;

end ;

end ;

(5)重载Paint方法

procedure TMyQRShape.Paint ;

begin

case LineType of

BottomTop:

begin //反斜线 /

Canvas.MoveTo(0

Height) ;

Canvas.LineTo(width

0 ) ;

end ;

TopBottom: //斜线 \

begin

Canvas.MoveTo(0

0) ;

Canvas.LineTo(width

Height ) ;

end ;

None: //直线

begin

Height := Parent.Height ;

Top:=0 ;

Width:=4 ;

Shape:=qrsVertLine ;

Inherited Paint ;

end ;

end ;

end ;

(6)重载Print方法

procedure TMyQRShape.Print(OfsX

OfsY : Integer);

begin

with QRPrinter do

begin

case LineType of

BottomTop:

begin

Canvas.MoveTo(XPos(OfsX + Size.Left)

YPos(OfsY + Size.Top)+Height) ;

Canvas.LineTo(XPos(OfsX + Size.Left)+width

YPos(OfsY + Size.Top) ) ;

end ;

TopBottom:

begin

Canvas.MoveTo(XPos(OfsX + Size.Left)

YPos(OfsY + Size.Top)) ;

Canvas.LineTo(XPos(OfsX + Size.Left)+Width

YPos(OfsY + Size.Top)+Height ) ;

end ;

None:

Inherited Print(OfsX

OfsY ) ;

end ;

end ;

end;

(7)保存并安装TMyQRShape控件。

本控件在Delphi40下调试、安装,并成功应用于某数据库管理系统的开发。该控件的完整代码如下。源程序:

unit MyQRShape;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

QuickRpt

Qrctrls;

type

TLines = ( None

TopBottom

BottomTop ) ;

TMyQRShape = class(TQRShape)

private

FLineType:TLines ;

procedure SetFLineType(Value:TLines) ;

protected

procedure Print(OfsX

OfsY : integer); override;

procedure Paint ;Override ;

public

published

property LineType:TLines Read FLineType Write SetFLineType ;

end;

procedure Register;

implementation

procedure TMyQRShape.SetFLineType(Value:TLines);

begin

if Value<>FLineType then

begin

FLineType:=Value ;

Invalidate ;

end ;

end ;

procedure TMyQRShape.Paint ;

begin

case LineType of

BottomTop:

begin //反斜线 /

Canvas.MoveTo(0

Height) ;

Canvas.LineTo(width

0 ) ;

end ;

TopBottom: //斜线 \

begin

Canvas.MoveTo(0

0) ;

Canvas.LineTo(width

Height ) ;

end ;

None: //直线

begin

Height := Parent.Height ;

Top:=0 ;

Width:=4 ;

Shape:=qrsVertLine ;

Inherited Paint ;

end ;

end ;

end ;

procedure TMyQRShape.Print(OfsX

OfsY : Integer);

begin

with QRPrinter do

begin

case LineType of

BottomTop:

begin

Canvas.MoveTo(XPos(OfsX + Size.Left)

YPos(OfsY + Size.Top)+Height) ;

Canvas.LineTo(XPos(OfsX + Size.Left)+width

YPos(OfsY + Size.Top) ) ;

end ;

TopBottom:

begin

Canvas.MoveTo(XPos(OfsX + Size.Left)

YPos(OfsY + Size.Top)) ;

Canvas.LineTo(XPos(OfsX + Size.Left)+Width

YPos(OfsY + Size.Top)+Height ) ;

end ;

None:

Inherited Print(OfsX

OfsY ) ;

end ;

end ;

end;

procedure Register;

begin

RegisterComponents('QReport'

[TMyQRShape]);

end;

end.

Gmail新设计影响邮件营销 Fcaebook间接获利 百度高德小米网易杭研讲师登场 SDCC 2013第二批议题发布(图) [开源推荐]JS-Git:一款纯JavaScript实现的Git项目 良心企业Lavabit、Slient Mail相继关闭,美国云安全已死? 一周观察:LXC真的是PaaS的未来吗? [企业开源系列]Google背后的开源力量 合作: “云”潮中淘金的金钥匙 Windows 8.1尚未发布 Build 9471版遭泄露网爆高清大图 Imangi创始人:我眼中的App Store 职业设计生涯:打造世界上最小巧最强大手电 【SDCC 2013】Coding For Fun活动火热招募中! YARN之上的大数据框架REEF:微软出品,是否值得期待? 创建大数据公司之前你需知晓5件事 前途渺茫,考虑出售的黑莓还能找到买家吗? 帮助开发者轻松管理项目的8款在线工具 现代Web应用开发者必备的六大技能 JavaScript异步编程好助手:Promise模式 功能解析:Red语言推出0.3.3新版本 可穿戴?可吞咽!UI和UX的悄然转变 华为刘成:讲述开发者联盟的故事 出尔反尔,Amazon咬文嚼字玩转私有云 创业公司SOASTA:曾帮助伦敦奥运会官网进行云负载测试 金山云进一步聚焦云存储 Facebook公布用户数据:美国移动用户占比78% Zynga开源服务器监控工具zPerfmon 上海海事大学王洁:打造物流教学科研应用云平台生态系统 15个步骤创立技术公司,并收获千万用户(二) HTML5发展慢热 开发者热情不减 NimbleBit孪生兄弟创始人:最后悔没有专注和扩大品牌 将对Windows形成挑战:谷歌在Chrome OS中默认支持Office 微软的企业社交大动作:Yammer发布移动SDK 哪儿有免费的jsp空间并且有数据库支持的?谢谢 客户机的WinSock控件采用TCP协议,如何使用预设的固定的端口? sos!Help me! 有谁知道怎样用Capwnd控件(用于捕获视频的控件)?? 请帮我看看,谢了 请问如何控制imagecombo控件的下拉高度呢? 能告诉我什么是回调函数吗?注册的系统回调函数中引入的参数能在别的地方得到吗? 在RicheEdit里的字体颜色都是黑色,能变成其他颜色吗? 请问在视中如何使主框架的某个菜单项变为不可用(代码如下,错在什么地方,如何改?)! 请教VFP中GRID的显示和取值问题 请教一些有关用ROSE进行UML设计的问题 高薪寻找合作者:医院信息管理系统 求救!!!!为什么必须多按reset键才可以启动?? 請教: WideString如何存入數據庫image字段? 如何判断一个字符串是数字串?要源码(无内容) 登陆某些网站后浏览器的默认主页不能更改,怎么办???谢谢 请教简单的API函数的问题 ! 简单问题,怎么样得到下拉列表的选项?????最好有简单的原码 主  题:高薪寻找合作者:医院信息管理系统 上海机械电脑有限公司??? 小弟刚刚开始自学pb有好多问题想请教各位老大 HW待遇到底咋样??? 谁在CB里面用过游标? 关于网络协议软件的开发问题,编译成什么形式? 我是个新手,请教Linux下面C编程,该怎么入手,该看些什么样的书?来则有分!!!! 高分求源代码!又谁做过票据打印的软件!帮忙给点源代码! 如何执行insert 语句效率最高 数据窗口相同记录的判断??? 关于网络协议问题 求救,怎么判断试用版的试用天数? 关于IE的问题,help~~~ 请各位老大帮忙啊 请问如何串行化一个COLORREF变量,急---谢谢! 急,急,急,数据库更新的问题 win98下的DrawText api函数与Win200Server下的有什么不用呢? 评选水园“十大杰出青年”,请大家踊跃推荐(自荐)参评! 这个(Oracle)存储过程错在那?很简单,各位大虾看一下,一定给分!!谢谢啦!!!!! 好久不来了,有个问题请高手指点! 怎样设置SQL2000的某一字段为自动类型 熟悉GDI函数的朋友请进 如何屏蔽源代码 哪位大侠行行好,把我的密码屏蔽掉,只要不需输密码,分数一定不会少。 如何用PB制作DLL,请各位大师请教! 如何得到地址薄群組的具体用戶列表? 这里有谁用过mame编译器mingw,能否说说它的用法。先谢~~,up有分 有关win2000 server下病毒的问题 有點困惑,...... 哪里能找到最全的delphi自带的函数? 谁有CuteFtp Pro的注册码? 机器进不去系统,打开电源就听到一声响,就死在那里了,再开电源还是一样,怎么回事? 生物学与人类的关系及生物学的发展对社会的影响相关论文.不要太复杂,我是初一的,质量好的追加全部积分~! 生活离不开阳光? 人类在开发各种能源的同时,引发了哪些环境问题?你认为该如何解决? 人类生活离不开生物的多样性,举例说明人类与生物的关系.要求动,植物各举例三个. 如何加快环氧树脂AB胶的固化时间?固化时间如何控制? 人类开发能源引发了哪些环境问题,如何解决 三坐标测量位置度应注意什么?轮廓度应怎么踩点? 环氧树脂胶为何出现假固化现象? 什么胶水能粘得住泡沫啊?玻璃胶会腐蚀泡沫么?现在做航模呢 可是大大小小的装饰城都问了 都没有泡沫胶 一问就说 是发泡胶不啊?玻璃胶是硅酸的不知道会不会腐蚀泡沫.想一下什么胶水在 用三坐标如何测量附图的面轮廓度. 使用杠杆千分表测量轴与圆柱同轴度时出现大的误差,先将测杆中心轴装在工件轴上,再将杠杆千分表(使用长测针)夹在测杆上进行测量.杠杆千分表夹在测杆上不同位置进行测量,测量误差很 如何去除玻璃上透明胶撕掉的痕迹? 轮廓度测量方法? 千分尺能测量什么?卡尺与千分尺的功能有何区别? 请问我厨房水池的管和水池中间的缝隙要用什么,原来的损坏了一半了,是用玻璃胶还是泡沫胶?如果使用是不是要等到水池干了以后再封上? 水晶AB胶和水晶滴胶区别在哪里? 用千分尺怎样刚好就量到的就是外圆直径 有什么方法 请问厨房水池和下水管之间缝隙用什么胶?玻璃胶还是泡沫胶?(如图)用的时候是不是要等水池干了再用上 三坐标测量轮廓度时公差怎么分?如轮廓度为0.064mm,是±0.032mm这样分吗? 怎么举例说明人离不开地球再说说如果没有这一切,我们会怎么样?我上课要用! 怎样把5mmPVC板(1.22*2.44m)固定在玻璃上?用玻璃胶加泡沫胶能行吗 50分 水晶滴胶可不可以用AB胶代替没有水晶滴胶,能不能用AB胶代替 什么情况下会影响千分尺测量? 有什么不导电的金属?如题求教 如果没有的话一些较稳定的固体物质也可以的 生物生存离不开周围的() 量铜丝的千分尺怎么使用,怎么使用千分尺测量出铜丝的粗细? 什么金属不导电 生物生存离不开周围的什么?a.动物,植物   b.微生物   c.环境  d.气候条件 人类的生存和发展离不开( )和( ) 不导电的金属? 生物生存离不开什么要从(动植物) (环境) (气候条件).中选一个. 为什么木头不导电? 如何清除玻璃上的胶痕好用有实用, 而且不留檫痕,,表面 光泽 生物的生活离不开什么和什么 为什么木头桌子导电桌子上是电脑 桌子是干的 木头的 用手腕轻轻的放在桌子上会有电 干木头为什么会导电 企业文化建设为什么要注重环境保护和可持续发展 机械设计中同时标注平行度和平面度时,平行度应该大于平面度吗 湿木头是如何导电的单独用水是不能导电的,为什么湿了水后,就可以导电了 金属为什么导电他与塑料有何不同.有不导电的吗 平面度标注的意思 地球是我们唯一的家园摊位人类生存与发展提供了什么什么和什么,我们的生活离不开地球 手机上的触摸屏玻璃是导电玻璃吗是什么型号的导电玻璃呢,知道的请帮忙回答, 做磁路用的AB胶用哪种化学药水能够清洗 玻璃胶、泡沫胶弄到衣服上了,怎样才能弄掉呀 玻璃导电吗? 手上的环氧树脂AB胶水用什么洗最好?除了酒精和丙酮,还有没有可以用来清洗的?最好方便点的 且不伤手的.【弟弟每天都要接触环氧胶水 每天都要清洗 有没有什么护手霜好一点】 碳为什么能导电?在电解铝的阳极炭块, 碳是非金属材料,非金属的结构,我想知道碳导电的机理是什么?除了碳还有什么非金属能导电? 什么是导电玻璃,起什么作用?导电玻璃和一般的玻璃有什么区别? 螺旋测微器如何测量?如题:如何用螺旋测微器测量?如何读数? 干木头为什麽不会导电? 酷派5910橡胶手机套怎么洗才洗的干净? 千分尺测量问题请问我如果要测试的是大约一张纸那么薄的金属片..24张金属片..最最薄的可能只有复写纸那么薄,厚的也不过一毫米..千分尺能搞定吗?金属片厚度都不同.不是叠放.是单独测量. 西安哪里有卖海绵橡胶或者泡沫橡胶的? 导电玻璃是怎样导电的?哪能买得到? 如何测量液晶显示器尺寸,详细的计算公式是怎么写的! 举例说明我们的生活离不开光? 在手不碰到水的情况下带水的木头筷子导电吗? 以‘生物与生活’为题写一篇生物论文 有没有什么植物或生物生存不需要阳光?如果有,请把那种生物介绍尽量详细一点,感激不尽! 人类的能源主要有哪些.这些能源的开发利用前景如何.对环境影响如何
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn