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

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.

云计算如何影响数字化营销? 榜单:十位帮我们打理数据的存储大佬 OpenStack Grizzly版发布 Comcast、CERN成为新会员 谷歌携Blink来势汹汹 WebKit将成明日黄花? 星巴克与苹果合作 顾客可免费下载付费App 微信回应信令争议 将启动2.5G网络优化计划 凤凰网CTO吴华鹏离职 先后供职长达10年 外媒:开发者每周编码时间仅19.1小时 AppGratis CEO现身说法:应用被苹果儆杀始末 一个Web设计师眼里的云计算 戴尔高管:服务器业务领先惠普五年时间 Hoodie:基于JS与CouchDB的超快速Web开发框架 设计优秀API的五大规则 盘点英特尔IDF2013第一天:技术产品新趋势 英雄组队去打怪!Nimble Quest开发团队访谈 云通讯平台打造本土Twilio 被逼无奈?传微软或明年秋发布iOS和Android版Office 欧洲各国政府将向大众开放公共数据 访联想云存储罗予晋:优化MooseFS,共建生态系统 磊友创始人赵霏:关于HTML5与Flash争执之我见 国际混乱C语言代码大赛优胜作品详解之“A clock in one line” 揭秘程序员大脑编程的七大“误区” 从Java到ObjC语言的桥梁:谷歌J2ObjC 0.7版本亮相 数据库管理系统ParElastic:打破常规 扩展云端MySQL 谷歌苹果专利纠纷意在战略无意和解 美法官为其苦恼 Facebook收购神秘移动软件创业公司Osmeta 修改驱动,使用Erlang+VoltDB实现每秒87.7万事务 横评美国IaaS“8匹狼”:AWS、GCE、Azure、Rackspace、SoftLayer、Dell、HP、Joyent 独立游戏精神释放的舞台:IGF China 2013作品火热征集中 三款热门入门级在线编程教程对比 微软modern.IE:网站兼容性测试利器 急需foxpro for win版,哪有??? 请教一下,ado.net里如何返回表里的行数? 如何在HTML页面中使用 Acrobat 的 PDF 阅读器控件 关于一个遗传算法得问题!! 请问一个TSR问题! 关于跨数据库查询的问题 请问在ListBox中可不可以将每一行字符串设置成不同的颜色? vb6.0中如何将dbgrid里的内容添加到数据库里? 请问怎样才能将窗体上的最大化按钮设置成无用,而保留最小化按钮? 各位专家:请问win2000 PRO 下的config.msi目录中的好多以rbf为扩展名的文件是什么文件?有什么用?可以删除吗? ASP.NET中DATAGRILD的烦人处 新手问两个简单的问题??? 想知道如何才能看见前页纸油笔写过后留下的字迹?(散分) 为什么用odbc连接的paradox表不能编辑? 哪位大侠帮看一下代码(关于链表),为何出"invalid type argument of `->'"的错 一个非常非常想从事计算机软件开发的愿望 关于Hook的一个小问题 文档视图结构中无法显示编辑框,怎么办啊??用什么代替啊 十万火急! 通过网络,进行语音聊天的程序。 你了解人工受精吗? 有关“无纸化考试系统”bow api中的常量 关于addslashes的问题 有关“无纸化考试系统”的问题??thanks all,bow 如何删除windowsXP?紧急!!! 【数据结构】考试用的是类pascal还是c语言 我想往服务器中传文件。请问,需要组件吗? 如何写naked function的prolog 和 epilog? LoadIcon(NULL,IDR_QQ) 关于用c写聊天室 帮忙看看是不是session_start()惹的祸 请问谁知道那里有php源码下载的好站,贴几个出来看看 一妹妹姐姐程序员求职,找深圳的工作 初级问题:RichEdit控件的ScrollBy方法自动滚动 推荐一个毕业设计题目,不要太难,我学的流体,用VC来做一个什么东西,推荐一个,谢谢. 今天中午饭后练习时台球斯诺克单杠52分~~~ 二个问题,第二个问题比较难! Windows.Net 3607 简体中文版下载,要的话赶快,不然链接要被删除了. From left to right: Jini, Mini, and Umji 请问我应该如何把图片存储在数据库里啊(急啊) 成都的高程何时报名,在哪,电话,何时考?? 有关access与sql的比较。 百思不解,请指点迷津 看点什么好 在PB作安全管理时,要编历菜单,而我问的问题是... 发现触发器的问题 有个小问题.请高手们回复一下.谢谢 请问怎样用lotusscript生成一个文本文件,并写值? 请问各位,哪有英语听力mp3下载?(送分) 问题!斑竹看过来! 大家觉得 人民邮电 出的那套怎么样? 一个三位数,十位上是0,个位与百位上的数字之和是9,如果把这个三位数的个位数字与百位数字对调,则得到的新三位数比原三位数大693,求原来的三位数 直角三角形中两直角边长ab,斜边为c,斜边高h,说明1/a^2+1/b^2=1/h^2用初二能看明白的算法 写出算法 任意画一个△ABC,作下列旋转:(1)以A为中心,把这个三角形逆时针旋转40°(2)以B为中心,把这个三角形顺时针旋转60° (3)在三角形外任取一点为中心,把这个三角形顺时针旋转120° (4) 以AC中 一个三位数,十位上是0,个位与百位上的数字之和是9,如果把这个三位数的个位数字与百位数字对调,则得 设直角三角形直角边为a,b,斜边c上高为h,则以c+h,a+b,h为边的三角形是 三角形 三角形ABC怎么绕逆时针旋转90° 一个三位数,十位上是0,个位上与百位上的数字之和是9,如果把这个三位数的个位与百位对调,则得到新的三位数比原来的三位数大693,求原来的三位数. 直角三角形两条直角边为a b斜边为c斜边的高为h则以c+h a+b h 为边构成的三角形的形状是什么怎么办啊 1:2000的图用什么多大纸画不懂,有知道的吗? 已知:如图,在△ABC中,AB=13,BC=10,BC边上的中线AD=12.求证:△ABC是等腰三角形 一个三位数,十位数上是0.个位与百位上的数字之和是9.如果百位和各位对调之后两数相差693.求原来的三位有算式 一直角三角形中一条直角边比另一条直角边大d厘米,斜边上高时h厘米,求斜边的长 在rt三角形abc中,角c是90度,ac是3,bc是4.以c为圆心,当半径是2.4时,r与ab有什么位置关系? 关于确定一次函数表达式的题.已知y与x成正比例,且x=3时,y=-6,则y与x的函数关系式是?若直线y=kx+1,经过点(3,2),则k=?已知一次函数y=kx-2,当x=2时,y=-6,则当x=-3时,y=?若一次函数y=kx-(2k+1)的图像与y轴交 如图是一个长12cm,宽4cm,高3cm的无盖铁盒,在其内部要放一根笔直的铁丝,则铁丝的长度最长是多少求求大家画出 展开这个图帮我分析,不要复制原有答案,答得好的再追加50分 在RT三角形ABC中,角B =90',AB=6厘米,BC=8厘米.点P由A 出发沿AB,边向点B 以1厘米/S的速度移动,点Q由点B 出发沿BC 边向C 以2厘米/S的速度移动.如果点P,Q 分别从点A,B 同时出发,那么经过几秒后QP平行AB?有 确定一次函数表达式的两道简单题1.已知一次函数的图像过点(0,1)和点(2,-1)点M(m,二分之一)在图像上,则m的值是______.2.一次函数y=bx+2的图像经过点A(-1,1),则b=_____.写出方法教我 把一个图形先按1:2缩小后再按3:1放大得到的图形与原图形比较是A变大了B缩小了C大小一样 Rt三角形ABC中,角C=90°,AC=3cm,BC=4cm,以C为圆心,r为半径的圆与AB有什么位置关系?1、r=2cm 2、r=2.4cm 3、r=3cm’ 有一个三位数,个位数字为百位数字的2倍,十位数字比百位数字大1,若将此数个位数字与百位数字顺序对调,所得的新数比原数的2倍少49,求原数. 游泳池的长和宽缩小为实际长度1/500后画出的平面图,这个游泳池实际深2米,它最多能装多少立方米的水? 宽度约为130像素,高度约为160像素,宽高比例为1.3:1.6左右,jpg格式,30kb 以下.急. 有一个三位数,个位数字为百位数字的2倍,十位数字比百位数字大1,若将此数个位于百位顺序对调(个位变百位)所得的新数比原数的2倍少49,求原数 如果两个直角三角形相似,相似比为1:2,那么它们斜边上高的比为 宽度约为130像素(110~160之间),高度约为160像素(130~200之间),宽高比例为1.3:1.6左右,近期正面免冠1寸 有一个三位数,个位数字为百位数字的2倍,十位数字比百位数字大1,若将此数个位与百位顺序对调 在三角形ABC中,cosA=4/5,求sin^2A+B/2+cos2A的值 一元二次方程(x-1)(x-2)=0的两个根为x1,x2,且x1,x2,且x1>x2,则x1-2x= 直角三角形两直角边分别为5厘米,12厘米.其斜边上高为多少 25.已知:二次函数 的图象经过点(1,0),一次函数图象经过原点和点(1,-b),其中 且 、 数学七年级第七章与三角形有关的角.CE是ABC的外角角ACD的平分线,且CE交BA的延长线于点E,证明角BAC大于数学七年级第七章与三角形有关的角。CE是ABC的外角角ACD的平分线,且CE交BA的延长线于点 一个直角三角形他的两条直角边分别是3分米和4分米,斜边是5分米,求他的斜边上高是多少?女儿的数学题 若两个数的和为5,积为6,求以这两个数为根的一元二次方程(主要是过程) CF是三角形ABC的外角∠ACD的平分线,且CE交BA的延长线于点E,证明∠BAC>∠B.这道问题在初一下册数学书的第77页的第10题(人教版)注意结尾是∠BAC>∠B.而不是“=”. 一个等腰直角三角形斜边和斜边上高的和是21则斜边的长是多少 一个两位数,其十位数是a,个位数是b,如果它们的位置对调,得到一个新的两位数,则原来两位数与新的两位数的差必定是9的倍数,你能说明其中的理由吗? CE是三角形ABC的外角角ACD的平分线,且CE交BA的延长线于点E,证明角BAC等于角B加2角 一个直角三角形3,4,5 斜边上高线分成2个直角三角形,这两个小三角形的内心连线长度 一个两位数,个位上的数字与十位上的数字之和是7,若把个位与十位数字对调,则所得的两位数比原两位数大27求这个两位数. CE是三角形ABC的外角,角ACD的平分线,且CE交BA的延长线天点E,证明角BACD大于角B 已知直角三角形斜边的长是斜边上高的4倍,求两个锐角的度数 已知:一次函数y=kx+b的图像与y轴的交点到原点的距离为3,,且过A(2,1)点,求它的解析式. 如图在三角形abc中,ab=17,bc=16,bc边上的中线ad为15,三角形abc是等腰三角形吗?为什么 用24厘米的铁丝围成一个直角三角形,这个三角形三条边长度的比是3:4:5,求这个直角三角形的面积. 一次函数y=kx+b的图像过点(-1,- 3),且与x轴,y轴的交点到原点的距离相 等,那么它的表达式不可能是 y等于x-2y等于-3x-6 在△ABC中,AB=17,BC=16,BC边上的中线AD=15,求ABC的形状 用24厘米的铁丝围成一个直角三角形,这个三角形三条边长度的比3:4:5,这个直角三角形斜边是多少厘米? 一个半圆形花池,画在比例尺是1比500的图纸上.量出图上相关. 已知a+b+c=3,a^2+b^2+c^2=3,求a^2010+b^2011+c^2012 在三角形ABC中,AB=AC=12,∠BAC=150°,CD垂直于BA的延长线于D点,求D点到A点的距离 如图,三角形ABC中,角ACB=90度,AC=BC,将三角形ABC绕点C逆时针旋转角a(0度 已知c为负整数,且a,b,c满足(a-1)^+|2b+2|=1+c,则(a+b)^2009+a^2010+b^2011+c^2012= 一次函数y=x-4与y=-x+2的图象交点的坐标是()这个交点到x轴的距离是()到y轴的距离是()到原点的距离一次函数y=x-4与y=-x+2的图象交点的坐标是()这个交点到x轴的距离是(),到y轴的距 在三角形abc中,ac=bc,bc边上的中线ad把三角形的周长分为12厘米15厘米两部分,求三 如果2010分之A=2011分之B=2012分之C,则A:B:C= 一次函数y=x-4与y=-x+2的图像的交点到原点的距离是? 已知在三角形ABC中,AB=3厘米,BC边上的中线AD,把三角形ABC分成了周长差为1厘米的两个三角形,求AC的长.(两种情况) 已知a=2011x+2010,b=2011x+2011,c=2011x+2012,求a2+b2+c2-ab-ac-bc的值a2,b2,c2,为a的平方,b的平方,c的平方. 在三角形ABC中,AB=AC,E是AB的中点延长AB到D,使BD=BA,求证CD=2CE 将一个三角形ABC绕点A逆时针旋转90度,A(0,4),B(-4,0)C(0.0)c'(4,4)B’(4,0),原三角形ABC内一点P(a,b),旋转后p‘坐标为,方法听老师讲过,不记得了,好像是找出已知3个点坐标变化规律,列一
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘