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

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.

检测磁盘是否变化-Delphi资料 检测驱动器容量-Delphi资料 检查驱动器是否就绪:-Delphi资料 建立简单的任务栏应用程序-Delphi资料 将程序放在Windows启动中-Delphi资料 将光标限制在某区域-Delphi资料 将文件放入回收站-Delphi资料 禁止用户切换任务-Delphi资料 控制面板大全-Delphi资料 控 制 系 统 菜 单-Delphi资料 拦截消息处理过程-Delphi资料 利用API函数开发DELPHI程序三例 利用Hook技术实现键盘监控-Delphi资料 利用浏览窗口 DragDrop 任意文件-Delphi资料 利用未公开函数实现Shell操作监视-Delphi资料 妙用Delphi的标识号 判断Windows类型和版本-Delphi资料 判断一个程序是否dos版本:-Delphi资料 屏蔽系统按键-Delphi资料 屏幕抓字技术揭密(转载)-Delphi资料 启动控制面板-Delphi资料 取得系统所有窗口的方法-Delphi资料 全部窗体可使用鼠标点中移动-Delphi资料 让图像旋转-Delphi资料 热启动控制-Delphi资料 如果隐藏和显示Windows的任务条-Delphi资料 如何把文件删除到回收站中-Delphi资料 如何从任务栏上隐藏应用程序的按纽?-Delphi资料 如何得到Windows 的temp路径-Delphi资料 如何得到WINDOWS的SYSTEM路径-Delphi资料 如何得到上一个激活的组件-Delphi资料 安装声卡的驱动alsa,make后,出现Need by“hwdep.o”stop.请问这是怎么会事?! 这样给二维指针分配内存可以吗?? 请问如何实现win2k server和DOS机之间的通讯 请微软专家、思归、江雨.net,spring.z进来!请问如何在winform模式下调用Web Service?想实现相当于asp下的XMLHTTP的功能!十万火急!!! 我的显示有问题,大家帮忙看一下好吗? 统计,大家都用哪里的php收费空间? 请教JTree中怎么任意设置TreeNode的图标? 在堆栈上分配结构与用new分配结构有何区别 是否可以对datareport中添加的控件编程呢 三层中数据返回的问题 在vb.net里有什么简便的办法可以处理所有控件的keydown消息? 菜鸟问题 在线等 Page.Response.Write("<img height=13 src='images\deleteTrue.gif' width=13 align=middle>");出错 我想买一款数码像机!!! 动态连接excel表的问题 用什么方法可以实现我计算的数字,只有两位小数,谢谢!! 知道26号放假!高兴!!放分!! 问个瓜问题 推荐几个好的编程论坛(中文的),不看的后悔呀!请不要移贴或删除! 关于脚本与代码的通信问题。。。 用WiseInstall作安装程序,怎么让可执行程序自动识别专用的文件,即点击专用文件即可用对应执行程序打开 在POWERDESIGN中将数据库设计倒入WORD报表的中文乱码问题 访问数据库时遇到的问题 如何把Excel的图表另存为图形文件?? 紧急求救!!(关于调用exe的问题) 关于动态删除记录的问题,大侠指点!!! 请问如何把用户上传的文件(所有)都保存在sql里面? 在POWERDESIGN中将数据库设计倒入WORD报表的中文乱码问题 时间设置 年关已到,谁有工作总结的模扳,给小弟发一份。 今天女朋友回家,放分,终于可以自由几天了,头一次放分,只有这么多了 生气!我真的很生气!现在的人怎么都这样? to shibichen(务必请近来一下) 在VC中怎么写关于猫的AT命令的程序?最好又程序。分数不过另外给 问一个傻傻的问题 帮帮忙,我送什莫礼物给女朋友好呢? 如何将选择出的内容存入文本文件??? Delphi中数据库操作Filter的原理,他和SQL语句查询输出的结果有什么不同? 在EXCEL中如何实现分两上SHEET打印!? 帮帮忙,我送什莫礼物给女朋友好呢? 几个linux下典型的应用问题,,高手新手都请进 ;-) 有关IE的奇怪问题 困扰很久的问题了:conn.execute为什么有是不能执行? 请问当一个页面中某个frame包含的网页不断重复刷新的时候怎么不让IE下面的刷新条滚动? 为什么局域网内看不到网站,而在广域网内却可以看到网站! 哪位用过这个控件的3DES,SHA1算法?我调不出来,急~~~~~:( delphi中类似于On Error GoTo的语句是什么 采用缓存模式的Dataset如何一次性进行所有行的数据合法性校验? 运行程序时如何交换数据窗口中的两列的位置呢? 两个sql语句一样只有条件不一样,如何取并集? 无法设置DatabaseName是为什么? 全国收费公路 春节小型客车免费通行微聚2013春运 回家路上的“众生相河北:丈夫9年悉心照顾瘫痪妻子 称永12日朝鲜进行核试验资料画面别让新春变“辛春” 如何过年不再累中国式离别引共鸣 舍不得爸妈但还是要受大雾影响 海口滞留春节返程上千辆车卸胳膊箍脖子 广西街头卖艺团残忍表演泰国情侣接吻58小时 刷新世界纪录深圳一IT公司数千员工排队领红包嘉陵江重庆段进入枯水期 裸露河床成休浙江企业家悬赏20万请环保局长下河游美国脱衣舞娘整容险送命 双臀硅胶翻转四川游客赴港游 受导游侮辱"不买珠宝8亿富豪千金庄思敏晒素颜床照(图)母亲为帮儿子戒网在网吧贴告示禁其上网上海曝光“染色瓜子”:浸泡半小时就“网曝李双江之子涉嫌轮奸 盘点不省心的李双江之子轮奸案细节曝光:5男殴打恐新版任盈盈否认有背景 “神改编”集锦李双江四大关门女弟子 曾因儿子打人劳售价低至399 小米廉价新机要来了!国务院:丰富创业模式 鼓励“互联网+芦荟是空气净化专家!治雾霾,14种常A股连续大跌牛市变脸 或现短熊长牛格千元大杀器? TCL么么哒3N 图赏村里的摄影师 PK 城里的摄影师计算机行业深度研究报告:车联天下,未陆金所挺进千万级用户量大关 下一步是〔〕女人,记得按身高选冬靴,千万别买下一个软银看中的“独角兽”是谁?你曾经的班级,有一个每天早晨求助的学这还怎么玩 全名枪战狙击枪浅谈优劣〔〕十款气场大衣,穿出有范简约格调聪明与智慧的区别中国癌症地图:两种癌遍布全国!《建筑与文化》国家级建筑期刊征稿〔〕女生必备小西装, 让你美丽万人迷重读鸦片战争:清军战力为何如此不堪一2015 年给地产人才们的建议臻孝堂替儿女把孝心带到父母身旁10大人艰不拆的网络真相,你中了几枪
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘