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

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.

二战大数据故事:数学家、物理学家、概率论击败德国潜艇 软件定义网络服务商Pertino B轮融资2000万 Scringo社交组件,让你的应用“热闹”起来! Android开发必备:Eclipse 4.2 SR2版本发布 32场!2013年360HTML5校园行首站告捷 移动周报:不做内容,只钻技术的快播 一周消息树:中国开源发展缓慢的“病因” 百度应用引擎BAE正式开放 新增支持Node.js CloudVelocity,下一个VMware? Buffer创始人谈开发:先验证,后编程! 谷歌可穿戴式产品再度来袭:会说话的鞋子 未来Chrome OS或取得Android般成功 云落地@北京,北京市北斗公共平台或开放API? GitHub再遭攻击 主要服务中断约一小时 移动开发者将有望拥有.app域名使用权 微信将推“游戏中心”?移动互联网入口圈地加剧 美国航空公司首次开放API 并举办“黑客马拉松”编程大赛 谷歌数据中心设计的10条“黄金法则” GitHub时代:为什么我们都在开源 VMware发布Horizon Suite 三款应用打包折扣低 TOP30+应用排行榜:二月份国内外综合榜单 开源是否意味着不需要负任何责任? 微软年度科技展 酷炫技术知多少 图解Hadoop生态系统 HTML5并不给力 微软IE10又默认启用Flash Oracle出新提案:Java正逼近iOS? TIOBE 2013年3月编程语言排行榜:厚积薄发 Ruby反超Perl 清华大学开源镜像站将被关闭 发表公开信 前Google资深研究员赵勇回国创业 专注计算机视觉/模式识别 开发者福音,微软开源Kinect源代码 日本很积极:富士通和NEC确认将推Tizen设备 错误提示:“无法为更新行集定位:一些值可能已在最后读取后改变”。看一下,谢谢。 SQL Server 存储过程中错误处理问题,请教高手 請教: ADO 的 RecordSet 的打開方式和鎖方式 如何选择三层架构的中间件产品? 小呆猫谢谢了,再请教一下。。。 我想问一下,如何能在程序中锁定键盘和鼠标 西摩斯(厦门)医疗软件开发有限公司急招精通Delphi,MS SQL Sever软件设计师! 大家帮忙啊... 关于 int[][][] a = new int[3][3][3] 再问clavy(有巢无车氏) 和 wqxtt(wqxtt) 关于WINCE 下ACCESS 与 WINDOWS 下ACCESS 的转换 关于C/S结构的问题?快帮我啊!!! 各位programer加班有加班工资吗? 代理服务器的原理?——有谁知道! 请问怎么在一个对话框程序的文本框中绘图 请问windows网络程序PING编程技术里的几个问题,ICMP回显里面的timestamp是怎么纪录进去的 什么地方可以Down rose?或谁寄给我一个? 编写一个函数,通过指针连接两个字符串!!!!!!!!!!!! 用applet怎样打开一个文件吗? 请问哪种ORB产品实现了com服务器/corba客户机的桥 我读《深入探索C++对象模型》的感受,cber能再回答我一次么? 谁有DELPHI的有关网络编程方面的资料?给我一份可以吗? 关于stringgrid的问题????? 痛苦啊,难道要放弃BCB吗? 大家认为在开发过程中是否不能用全局变量? 如何让LINUX支持我显卡 高手,谁来帮我一下~! 取字符 在SDK中,如何获得客户区的宽度和高度呢??(哪两个函数呢?) 哪里有ATL的电子书下载?最好是中文的! 高手谁能帮帮我呀~~~~~~~! 请教:如何在statusbar的panel中显示一个图标呢? VC++中如何使用OLE对象? 初来乍到,发现这儿JJMM还挺多的。。。 请高人指教~! CSDN中碰到这种问题,该如何解决呢? 如何学习director 你能帮我一下吗?~ 企业商务管理软件,开放全部的源代码及开发文档! 企业管理软件,全套源码及开发文档!!!! 哪里有支持任何波特率的通讯控件下载? net_lover(孟子E章)请进~! 一个有关CWebBrowser的问题,急急急!!! 这样的语句为什么不可以实现一次删除多条记录 plmm是什么意思? 各位大侠,知道哪儿有直接可用的上传文件的控件吗? 多谢了!!! 论坛的题目是不是太没意思了 一个sqlserver7统计的问题?? varchar类型不是可以输入255个字符吗,为什么我输了160个就出现'item XXX doesn't pass validation test ' 唉 ~~~~~ 奈何 ~~~~~ 突然想到个荒唐的问题: 事件和过程有什么不同? 奇怪的事前,高手请进来 BE和BF三等分∠ABC,CE和CF三等分∠ACB,∠A=75°.求∠BEC和∠BFC的度数.如图,BE和BF三等分∠ABC,CE和CF三等分∠ACB,∠A=75°.求∠BEC和∠BFC的度数.∠A是75°,不是60°,看清楚啊./> 如图:己知∠BAD=∠CBE∠ACF,∠FDE=58∠DEF=45,求三角形ABC各内角的度数 在锐角三角形abc中,角A=2角B,则b/b+c的范围 在△ABC中,∠ACB=90度,AC=BC,BE垂直CE于点E,AD垂直CE于点D,试说明:△BEC全等于△CDA. 如图.在三角形abc中,ab=ac,点d,e,f分别在bc,ab,ac上,bd=cf,be=cd,角fde=58°,求角c的度数 在锐角三角形ABC中,角ABC所对边为a.b.c已知b=2,c=3,sinA=(2√2)/3求三角形ABC的面积及a的值 在三角形ABC中,角ACB=90°,AC=BC,BE垂直于CE于点D,说明三角形BEC全等于三角形CDA. 在三角形ABC中,角A、角B、角C的对边分别是a、b、c,下列条件中,能判断三角形ABC为直角三角形的是( )A.a+b=c B.a:b:c=3:4:5C.a=b=2c C.∠A=∠B=∠C 在锐角三角形ABC中,根号3a=2csinA(1)确定角C大小.(2)若c=根号7,且三角形ABC的面积为3倍根号2/2,求a+b的值. 如图,在△ABC中,AB=AC,以AB为直线的圆O交AC于E,交BC于D 求证(1)D是BC上的中点 (2)△BEC相似△ADC(3)BC²=2AB*CE 在△ABC中,∠A,∠B,∠C的对边分别是a,b,c判断该三角形是否是直角三角形?并指出哪一个角是直角?(1)a=根号3,b=2根号2,c=根号5 (2)a=5,b=7,c=9 (3)a=2,b=根号3,c=根号7 (4)a=5,b=2根号6,c=1 在锐角三角形ABC中,角A,B,C的对边分别为a,b,c,且根号下3a=2csinA (在锐角三角形ABC中,角A,B,C的对边分别为a,b,c,且根号下3a=2csinA (1)求角C的大小; (2)若c=√7,a+b=5求三角形的面积 如图所示在RT三角形ABC中,角ACB=90度,AC=BC.D为BC中点,CE垂直AD于E,交AB于点F.连接DF求证角ADC=角BD此题与市面上题目不同,请认真思考是角BDF,打不上去了,嘻嘻,sorry 在直角三角形ABC中,角C=90度,过点B作BD平行AC且BD=2AC连结AD判断三角形ABD...在直角三角形ABC中,角C=90度,过点B作BD平行AC且BD=2AC连结AD判断三角形ABD形状并说明理由(角C=90度,就是一个直角梯形上底 在锐角三角形ABC中,a,b,c分别为角A,B,C所对的边,且√3a=2csinA.(I)确定角C的大小: 如图,在△ABC中,AB=AC,以AB为直径的圆O交AC于E,交BC与D,求证:(1)D是BC的中点(2)△BEC相似于△ADC(3)BC平方=2AB*CE 在直角三角形ABC中,角C=90度,若A+B=13,且该三角形的面积是22.,则C等于-----. 在锐角三角形ABC中,a b c 分别是角A B C的对边,且√3a-2csinA=0①求角c大小②若C=2,求a+b的最大值 在△ABC中,AB=AC,以AB为直径的⊙O交AC于点E,交BC于点D.求证 (1)△BEC∽△ADC (2)BC²=2AB·CE如图 在直角三角形ABC中,角C=90度,其中a:b=3:4,c=40求三角形ABC的面积? 在锐角三角形ABC中,已知a=6,c=2√3.三角形ABC的面积为3√3,则角B等于多少? 如图,在△ABC中,AB=AC,以AB为直径的圆O交AC于点E,交BC于点D.求证 (1)点D是BC中点 (2)△BEC~△ADC(3)BC²=2AB X CE 在直角三角形ABC中,a+b+c=90,且a=40,求三角形ABC的面积 在三角形ABC中,A,B为锐角,角A,B,C所对的边分别是a,b,c,且sinA=√5/5,sinB√10/10(1)求A+B的值(2)若a-b=√2-1,求a,b,c的值 如图在三角形ABC中∠ACB=90CD垂直AB与D∠BAC的平分线交CD于E过E点作EF‖AB交BC于F求证CE=FB图传不上来 在直角三角形ABC中,角C=90度,若A+B=13,该三角形的面积是22,则c=--------. 在三角形ABC中,∠A=90°,角平分线AE,中线AD,高AH的大小关系为 三角形ABC中,∠C=90°,CD垂直AB于点D,∠BAC的平分线交CD于E,过点E做EF平行于AB,交BC于F,求证:FB=CE 在直角三角形abc中,角c=90度,已知a:b=3:4,c=10,求三角形面积 在三角形ABC中,角A=90°,角平分线AE、中线AD、高AH的大小关系是? 已知,如图,在三角形ABC中,角ACB=90度,CD垂直AB,AE是角CAD的平分线,过点E作EF平行于BC交AB于F,求证:CE=EF 在直角三角形ABC中,角C等于90°,AB、BC、CA的长分别为c.a.b,求三角形ABC的内切圆 在三角形ABC中,AE,AD,AH分别是角平分线、中线、高线,角A=90°的大线关系是? 已知三角形abc中,角ACB=90°,CA=CB,CD垂直AB于D,CE平分角BCD交AB于E,AF平分角A交CD于F.求证:EF平行BC 用反证法证明:三角形ABC中至少有两个角是锐角.请写明过程. 已知三角形ABC中AB=AC,AD和BE是三角形ABC的高,相交点H,且AE=BE求证AH=2BD 如图,在三角形ABC中∠BAC=90度,AD垂直于BC于点D,CE平分∠ACB,交AD于点G,交AB于E,EF垂直于BC于F,求证:四边形AEFG是菱形 已知:锐角三角形ABC中,角B=2角C,求证:角A>45度.(用反证法证明) 在三角形ABC中,AB=AC,高AD,BE相交于H,且AE=BE,试说明AH=2BD.自己画图 三角形ABC是圆O的内接三角形.AC=BC.D为圆O中弧AB上一点.延长DA至点E.使CE=CD 求证AE=BD 已知锐角三角形ABC中,角B=2倍的角C,用反证法证明角A>45度 在三角形ABC中,AB=AC,AD和BE是高,它们相交于点H,且AE=BE.求AH=2BD在星期6晚上截止,有急用~图自己画吧... 角a=65度,角acb=72度,且CE平分角ACB,BD平分角ABC,求角BEC的度数! 在三角形ABC中.BD,CE分别是边AC,AB上的中线.点M是三角形BEC的重心点N是三角形BCD的重心 求MN:BC 用反证法证明:在三角形ABC中,若角C是直角,则角B一定是锐角.马上要, 如图,在△ABC中,∠ACB=90°,AC=BC,BE⊥CE于点E,AD⊥CE于点D.求证:△BEC≌△CDA. 如图,已知 ∠ABC=∠ACB CE⊥AB于E BD⊥AC于D △BEC≌△CDB么 用反证法证明:在三角形ABC中,若C=90度,则角B一定是锐角 如图,在△ABC中,角ACB=90’,AC=BC,BE垂直CE于点E,AD垂直CE于点D.求证:△BEC全等于△CDA 已知,如图,在等边△ABC中,点D,E分别在BC,AC上BD=CE,AD与BE交与F.求:如果AB=12,BD=4,求S△BDF:S△BEC 已知三角形ABC,角ABC分别对应边abc 且1/a+1/c=2/b.证明角B是锐角 在△ABC中,∠ACB=90°,AC=BC,BE⊥CE于点E,AD⊥CE于点D.求证:△BEC≌△CDA 如图,在△abc中,ab=ac,bd=cf,be=cd,∠fde=58°求∠c的度数 已知三角形ABC三边abc的倒数成等差数列,证明:角B为锐角 如图三角形ABC中,角ACB=90度,AC=BC.BE垂直CE于点D,求证•三角形BEC全等CDA.谁能写写过程给我, 三角形ABC中,AB=AC,BD=CF,BE=CD,角FDE=58度求角A图 在锐角三角形abc中,角A,B,C的对边为a,b,c且(且(2a-c)cosB=bcosC ⑴求角b大小 ⑵设向量m=(sinA,1),n=(3,cos2A),求向量m*向量n的范围. 如图,在△ABC中,BD是高,CE是∠ACB的平分线,BD,CE交于点P,∠A=70°,∠BEC=110°,求∠BPC和∠ABC的度数 如图在△ABC中,点D,E,F分别在BC,AB,AC上,且BD=BE,CD=CF,∠A=70°,求∠FDE的度数 如图,已知锐角三角形ABC中,角A,角B,角C的对边分别是a,b,c.(1)试说明S△ABC=1/2absinC (2)若a=30cm,b=36cm,∠C=30°,求△ABC的面积
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn