用Delphi制作中国式报表

2016-01-29 14:04 104 1 收藏

用Delphi制作中国式报表,用Delphi制作中国式报表

【 tulaoshi.com - Delphi 】

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

  然而,在设计中国式报表时,笔叻⑾衷赒uickReport中设计列与列之间的竖线和斜线比较困难;虽然QuickReport提供了TQShape控件,使用该控件可以画出列与列之间的竖线,但如果用户不能正确地调整TQShape实例的高度,输出报表中的竖线不是不连续就是超长,另外如果我们调整了某个Band的高度,我们将不得不调整该Band下的所有TQShape实例的高度;至于斜线,QuickReport报表组件根本就没有提供这一功能。

  笔者认真查找了有关的资料,成功地解决了以上问题,希望能对大家有所帮助。

  解决思路

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

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

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

  控件设计步骤

  步骤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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

end

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

 

步骤5.重载Paint方法。[next]

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)


procedure TMyQRShape.Paint

begin

case LineType of

BottomTop:

begin

Canvas.MoveTo(0,Height)

Canvas.LineTo(width,0 )

end

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

TopBottom:

begin

Canvas.MoveTo(0,0)

Canvas.LineTo(width,Height )

end

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

None:

begin

Height := Parent.Height

Top:=0

Width:=4

 


 


Shape:=qrsVertLine

Inherited Paint

end

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

end

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

end

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

步骤6.重载Print方法。[next]


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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

None:

Inherited Print(OfsX,OfsY )

end

end

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)

end;

 

来源:http://www.tulaoshi.com/n/20160129/1492426.html

延伸阅读
男人的中国式ED七关键词 1.压力 不知不觉已到了不惑之年。ED就喜欢找这个年龄的男人。据调查,年龄40岁以上的男性,其中40%患有ED。但是,为什么有的人40岁就ED缠身,而有的人70岁了还功能完好?因为ED跟年龄并不相关,而跟压力成正比。 在现在高强度、快节奏的生活方式的影响下,男性承受着很大的工作、生活...
标签: 整形
中国式美女最热的整形项目是什么 还是来看看中国式美女最热的整形项目吧! 一、眼睑 手术名称:重睑术 医学美容中的重睑术即双眼皮手术。做双眼皮手术的方法很多,常用的有结扎法,压条法,埋线法,切开法等,新型的方法有用镭射进行手术,可根据求美者不同的基础条件进行选定。另外,除重睑手术外,可配合内眦开大...
标签: 分娩
父母在教育孩子的过程中,存在10个致命错误: 一、对孩子期望过高,管教过严 被逼迫出来的“优秀”孩子,有很大一部分有心理疾病,容易对父母,对社会产生怨恨。 二、不尊重孩子,为孩子做所有决定与选择 这一点,从孩子很小的时候就开始了。 三、不相信孩子,不给孩子学会“自律”的机会 当孩子关上...
不是处女座的设计师当不了好甲方据小道消息说,乔布斯大神家徒四壁,什么也没有,就是因为市面上的家具,没!有!一!件!能入得他老人家的法眼。优秀的设计师们这时候该握拳抵住胸口了,是的,无论是作品还是生活,我都不会放弃追求美。但两者有联系吗?当然了,今天分享来自阿里巴巴的资深交互设计师Heidixie的好文,来看看最近很火的「断舍离」「...
标签: 心理健康
近日,刘震云的小说《一句顶一万句》在读者中掀起不小的波澜,书中对“中国式孤独”的深刻描述激发了许多共鸣:人们总是习惯于把想说的话藏在心里,在很多场合表现矜持,而这正是“中国式孤独”的体现。专家指出,要摆脱“中国式孤独”,最关键的是要敞开心扉。     不主动交际缘于孤独感 ...

经验教程

137

收藏

74
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部