delphi实现打印报表功能
Delphi报表制作技巧20篇

2、控件设计步骤
步骤1、使用Delphi提供的控件向导,选择TQShape为父类,建立新类TMyQRShape,并选择适当的包(Package),最后生成单元文件。
Text。为了使报表更加美观和生动,可以设置打印机画布的字体、大小,还可以插入图片等。
用Qreport组控件制作报表
QuickReport是Quick Soft Development公司专为Delphi设计的用于制作报表的工具。Delphi3中Qreport组控件十分丰富,只要很好地利用这些控件就能制作出效果不错的报表来。
procedure TForm1.Print-repClick(Sender:Tobject);
var I,j,cp,ph,pw,w,h:integer;
beginif printdg1.Execute then //打开打印对话框
begin
for cp:=1 to printdg1.copies do //打印份数
数做为度量单位是一个明智的选择。具体做法如下:
VarPointX,PointY:integer;PointX:=GetDeviceCaps(printer
Handle,LOGPIXELSX);PointY:=GetDeviceCaps(printerHandle,LOGPIXELSX);printer
Delphi应用程序中中国式报表的制作
在众多可视化数据库开发工具中,
Delphi以其真正的面向对象、高效率、支持多层结构应用开发、支持多层B/S结构开发等优良特性脱颖而出,成为广大编程人员的首选开发工具。
在数据库应用程序开发中,系统设计员、程序设计员需要考虑的一个重要问题是如何设计和输出报表,在Delphi中我们可以采用多种方案来解决这一问题,如运用OLE自动化技术将数据输出到MS-WORD、MS-EXCEL中等,但其中最直接、最本地化的还是使用Delphi3.0/40中的QuickReport报表组件,它是挪威QuSoft公司专门为Delphi
用WORD做DELPHI报表输出工具

用Word做Delphi报表输出工具用Word做Delphi报表输出工具崔先迤笔者在实际应用中发现,报表的内容一般很少变动,但其字体格式及版式是经常变动的,而且有时用户为了某种需要,不想修改数据库的真实内容而又要改变报表内容。
如果用ReportSmith可以解决前者问题,但对于后者则无能为力了,且其界面是英文的,不合用户习惯。
如果用3.0中的Qreport的报表部件,则两者都不能实时解决,必须修改原代码后重新编译才能使用。
而使用Word及Excel则完全可以克服以上不足。
具体实现如下(以Word实现为例):首先用Word编辑报表格式,并排好版,把将要输出的数据项用表单域代替,并取名。
这里我们暂时假设有表单域Item1及Item2(均为文本型),将这个文档存为模板文件Example.dot,然后按如下步骤进行:1)运行Delphi3,在Form1里加入一个System部件集里的TDdeClientCov 部件,取名为DdeExample,将其ConnectMode设为ddeManual(手动方式);将DdeService 设为‘(WinWord)';将ServiceApplication设为‘WinWord'。
2)编写一个自定义过程,以激活Word,如下:procedure Tform1.WordActive(Cmds: TStrings);varWordPath: String;beginif(not DdeExample.OpenLink) then {判断是否巳动态链接}beginif(FindWindow(′OpusApp′, nil)=0) thenbeginWordP ath := ′C:\msoffice\winword′;if(WordPath=′′) thenShowMessage(′中文Word未安装或未设置路径,请安装设置Word中文版。
′)elsebeginDdeExample.ServiceApplication := WordPath+′\Winword.exe′;if(DdeExample.OpenLink) {如果巳动态链接执行宏命令}then DdeExample.ExecuteMacroLines(Cmds,False)else ShowMessage(′无法启动Word中文版!′);DdeExample.ServiceApplication := ′WinWord.exe′;end;endelsebegin{如果巳动态链接执行宏命令}DdeExample.ExecuteMacroLines(Cmds,False);end;endelseDdeExample.ExecuteMacroLines(Cmds,false);end;在private声明区里加入如下:procedure ActiveWord(Cmds: TStrings);3)在Form1中加入一个按钮Button1,在其onclick事件里写如下代码:procedure TForm1.Button1Click(Sender: TObject);varCmds:TStringList;{创建Cmds}TempItem1,TempItem2:String;begincmds:=TStringList.Create;cmds.Clear;TempItem1:=′数据项一′;TempItem2:=′数据项二′;with Cmds dobeginClear;Add(′[FileNew.Template = ″Example.Dot″]′);{打开模板文件Example.Dot}Add(′[AppMaximize]′);{文档最大化}Ad d(′[SetFormResult ″Item1″,″′+TempItem1+′″]′);{将数据TempItem1传给表单域Item1}Add(′[SetFormResult ″Item2″,″′+TempItem2+′″]);{将数据TempItem2传给表单域Item2}end;WordActive(DdeExample,Cmds);{调用自定义过程}Cmds.Free;{释放Cmds}end;运行这个程序,单击Button1,大家可以发现Word被启动了,屏幕上出现了&ldquo:数据项一”数据项二&rdquo两个数据项。
在Delphi编程中利用Excel实现动态报表

在Delphi编程中利用Excel实现动态报表0 引言随着计算机技术的不断普及, 办公的数字化程度越来越高, 出现了大量的计算机系统, 如固定资产管理系统、人事工资管理系统等等。
这其中存在大量的MIS系统。
MIS系统的一个重要特点是需要处理大量数据并形成报表。
由于行业或者其他一些原因, 这些报表的格式种类繁多, 而且还有一些复杂报表。
这些报表的格式在开发期间可能都无法设定。
为了解决这些问题, 本文采用了表格功能强大的Excel作为报表模板, 用户可以按照自己的要求设置报表格式, 程序运行时再根据用户的设置动态填入数据, 从而实现动态报表功能。
1 实现原理先由用户按照自己的格式生成Excel报表模板, 系统读取模板文件, 并把模板文件存入数据库, 保存用户输入的报表信息, 如某一字段填入第几行第几列。
报表打印时, 提取相应的Excel文件, 利用Delphi的Excel控件填入数据库的数据, 实现动态报表功能。
2 实现过程2. 1 定义数据表系统使用MsSql Server2000数据库,定义两个表,一个是MB,用来存储报表基本信息和Excel文件,一个是MB_Detail存放报表的详细信息,如对应字段的行号和列号。
表结构如下:图1 MB 表结构图2 MB _Detail表结构MB表中,“模板内容”字段为image类型, 用来存储Excel模板文件,“记录类型”字段用来表示是单张表格(只打印一条记录)还是列表(打印多条记录); MB Detail表中的列号数据类型为char, 对应Excel中的列号如A、B、C等。
2. 2 保存和读取Excel模板2. 2. 1 保存Excel模板本系统将用户设置好的Excel报表模板存入数据库“模板内容”字段。
由于本字段存储的是Excel文件内容, 需要采用特殊的存储方式。
本系统使用Delph i的TO leContainer控件, 与Excel文件建立连接, 最后存入数据库。
Delphi利用ReportMachine报表控件制作小计和总计报表

最近在做一个Delphi的发货清单的打印程序,其中涉及到需要计算清单的小计和总计的功能,文字难以表达清楚,上图吧:报表第一页的小计计算当前页面的商品价格总和,总计目前和小计一样是计算截止到当前页面的所有商品的金额和,下图为最后一页:这下大家明白了吧,就是要实现这样的报表。
废话不多说了,开始讲解我的思路:1.既然要计算小计,就是每页的金额和了,加入ReportMachine的计算文本框(TRMCalcMemoView),然后设置要汇总的字段值为数据字段“factSum”,然后选择计算文本框的属性面板中的“CalcOptions”选中“统计Brand”为要汇总的主项数据,统计类型为“合计(Sum)”,如图所示:2.最难的部分就是总计的计算,这不能简单的用计算文本框就能解决的,于是不得不用ReportMachine 的代码来处理,也就是在总计的文本框的OnBeforePrint事件中计算之前的小计文本框的值的和,然后赋值给总计文本框显示,先看下设计的报表:红色文字为两项总计的文本框的Name属性值。
下面是ReportMachine中自定义的OnBeforePrint事件函数代码如下:unit Report;varlValue,tValue: Double;//lValue=金额总计 tValue=税额总计procedure Memo1_OnBeforePrint(Sender: TObject);beginlValue:=lValue+CalcMemo1.CalcValue; //CalcMemo1为金额小计的文本框 TRMMemoView(Sender).Memo.Text := lValue;end;procedure Memo40_OnBeforePrint(Sender: TObject);begintValue:=tValue+CalcMemo2.CalcValue;//CalcMemo2为税额小计的文本框 TRMMemoView(Sender).Memo.Text := tValue;end;procedure Main;beginMemo1.OnBeforePrint:= Memo1_OnBeforePrint; //指定金额总计的文本框的OnBeforePrint事件的处理函数Memo40.OnBeforePrint:= Memo40_OnBeforePrint;//指定税额总计的文本框的OnBeforePrint事件的处理函数end;end.上面的代码先声明了两个事件函数用于计算两个累加的总计的值,然后赋值给相应的总计文本框;然后再Main中指定给总计文本框的事件,这样当打印总计之前先汇总赋值并打印。
delphi使用QuickReoprt生成报表

delphi使⽤QuickReoprt⽣成报表1.添加报表控件1>点击菜单命令‘’Componet/Install Packages‘’2>在弹出的对话框,点击Add3>在delphi⽂件夹下-bin⽬录-选择dclqrt70.dpl⽂件,点击添加安装好之后,在控件⾯板上可以找到Qreport ⾯板。
2.添加QuickRep控件创建⼀个 QuickRep1 对象。
TQuickRep控件是设置报表的核⼼控件,相当于打印范围,是其他控件的⽗级。
3.添加Adoquery1 对象1>将 QuickRep1的 DataSet 属性设置为 Adoquery1。
2>在 Adoquery1 的 SQL 属性⾥添加SQL语句。
3>设置ADOQuery1的connectstring属性为,根据实际数据库进⾏更改:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DB;Data Source=.4>设置ACtive属性为True。
4.添加标题栏,数据栏,统计信息栏1>在 QuickRep1 上添加 3 个对象:QRBand1、QRBand2 和 QRBand32>QRBand1 主要是作为表头来显⽰头部信息。
属性:BandType 设置为:rbPageHeader3>QRBand2 主要⽤来显⽰数据记录信息。
属性: BandType 设置为:rbDetail4>QRBand3 主要⽤来存放统计信息。
BandType 设置为:rbSummary5.在数据栏中添加QRDBText1(⽂本控件)⽤来显⽰数据库信息1>DataSet 属性设置为:ADOQuery1。
2>DataField属性设置为:所需要显⽰的数据库字段.6.在统计信息栏添加统计信息属性:Data 设置为:qrsDetailCount7.添加事件在对应的按钮事件中添加如下代码:Form1.QuickRep1.Preview ;。
delphi报表打印讲稿

报表打印在数据库开发应用时,一般都离不开报表打印功能,Delphi 6.0提供了一种完善易用的打印组件---QReport,利用它可是非常方便的实现报表打印功能,这里不准备详细讨论实现报表的一切方法,具体问题已经有不少资料,不过一般的资料都是介绍的应用英美模式构造报表,这种报表格式和国内一般的习惯并不相同,下面,我们将通过一个实际的例子,说明如何构造一个符合我们习惯的报表。
有了这样的基础,实现其它样式的报表并不是太困难的事情。
一、QReport面板组件介绍QReport面板提供的组件可以分类以下几种类型:1,模板类:这类组件是作为快速构建报表的模板或容器,它实际上是QReport面板左边的前六个组件,包括QuickRep、QrsubDetall、QRStringBand、QRBand、QRChildBand、QRGroup。
其中,QuickRep是必用组件,它必须加入到一个空白的表单中,作为建立报表的基础,其它所有的组件都要放在这个组件之上。
QRBand也是一个必用组件,它用于显示具体内容,内容的类型由BandType 属性来决定。
其它几个组件的使用频率低一些,主要是构建特殊类型的报表。
2,显示一般内容的组件:这类组件主要是为了显示非数据库类型的内容,或者提供一些特定的功能,包括:QRLabel、QRExpr、QRSysData、QRMemo、QRExprMemo、QRRichText、QRShape、QRChart 等。
其中,QRExpr既可以显示一般数据,也可以显示数据库数据。
3,显示数据库内容的组件:该组件主要用于显示数据库中的数据,这些组件包括QRDBText、QRExpro、QRDBRichText、QRDBImage等。
4,其它组件:这些组件包括QRCompositeReport用于合并多个报表, QRPreview用于预览报表,至于 QRTextFilter、QRCSVFFilter、QRHTMLFilter等组件则用于输出报表内容,这些组件用的较少。
《Delphi报表设计》课件

Delphi报表可以帮助用户更好地理解和分析数据,从而更好地做出决策。
Delphi报表还可以与其他软件集成,如Excel、Access等,从而实现数据的共享和交 互。
简单报表:只包含 基本的数据展示和 格式设置
报表交互:设置报 表的交互功能,如 筛选、排序、钻取 等
报表控件:使用TDBGrid控件实现报表的显示和编辑
报表事件:通过编写事件处理程序实现报表的交互功能
报表打印:使用TQRPrinter控件实现报表的打印功能
报 表 导 出 : 使 用 TQ R E x p o r t 控 件 实 现 报 表 的 导 出 功 能 , 如 导 出 为 P D F 、 E xc e l 等 格式
优化报表 布局:合 理布局报 表元素, 提高报表 的可读性 和易用性
优化报表 交互:减 少报表交 互次数, 提高报表 交互效率
01 检查报表设计是否正确,包括字段、 格式、计算等
02 使用断点调试,查看报表执行过程中 的变量值和错误信息
03 利用日志文件,记录报表执行过程中 的详细信息,便于定位问题
04
利用第三方工具,如SQL Server Profiler, 监控报表执行过程中的SQL语句和性能指标
05 优化报表性能,包括减少数据量、优 化SQL语句、使用缓存等
06 定期备份报表,防止数据丢失或损坏
错误类型:语法错误、逻辑错误、 数据错误等
异常处理:记录异常信息,显示异 常信息,重新执行异常代码
PART FIVE
导出格式:支持多种格式,如PDF、Excel、Word等 导出设置:可以设置导出文件的名称、路径等 打印设置:可以设置打印纸张大小、方向、页边距等 保存设置:可以设置报表的保存路径、文件名等
Delphi中用FastReport制作报表

Delphi中用FastReport制作报表报表作为系统信息的典型输出形式之一,是大多数应用系统非凡是MIS系统的重要功能。
是否具有一个良好的打印功能,往往从一定程度上关系到系统的成败。
Delphi有很强的报表功能,但是它的报表功能还不能满足我们的需要。
于是许多Delphi高手相继推出了不少优秀的报表控件(模块),作为QuickReport的补充,其中FastReport就是一个代表。
FastReport综合了QuickReport和Re portBuilder的优点,个头小,速度快,并带有全部源码。
笔者在开发一个药品治理系统时,用FastReport2.51成功制作出了和药品验收单、药品调拨单一模一样的表单式报表。
下面给朋友们介绍一下。
FastReport2.51下载地址:http ///soft/8805.Html。
报表的需求分析在医院工作的朋友都知道,药品入库时要填写药品验收单,药房工作人员领取药品时要填写药品调拨单。
笔者单位使用的药品验收单和调拨单不是专用的,而是通用的商品验收单和调拨单。
与百货业、电信系统使用的报表不同,它的外形为条形,每张固定可填五种药品,内容包括发货单位、发货单号、收货单位、品名、规格、单位、价格、金额等,一式三联。
综上所述,我们可以把报表设计的需求归纳如下:1. 大小为:长21cm,宽10cm;2. 每张可以打印5种药品,表单下面有本页小计。
3. 多于5种药品时开始新一张表单的打印,不足5种药品时要用空行补足。
报表设计1.打开FastReport的报表设计器,按照图1设计出“药品验收单”。
另外,InHJ、OutHJ、CaHj、LineCount这几个变量分别表示“入库合计”、“出库合计”、“差价合计”和“数据总行数”,在程序中将对这几个变量赋值。
2.按F11键,调出对象查看器,选中Band2,在它的OnBeforPrint事件中输入如下代码:beginif LINE# -1<>0and LINE# -1mod 5=0thenbeginshowBand Child1showBand band1end代码中用FastReport的内置函数 LINE# 取得当前行号,假如满足条件,就显示页头和Child3,开始新的一张表单。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delphi里自带有打印相关控件吗?怎么实现呀?打印dagrid表内容,或者说memo,Listbox,或者几个edit的内容。
谢谢
uses printers
var
lines:integer;
prntext:system.text;
begin
if printdialog1.execute then
try
assignprn(prntext); //将PRNTEST分配给打印机
rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件
printer.canvas.font:=memo1.font;
//把当前MEMO1的字体指定给打印对象的CANVAS的字体属性
for lines:=0 to memo1.lines.count-1 do
begin
writeln(prntext,memo1.lines[lines]);
end;
//把MEMO的内容写到打印机对象
system.close(prntext); //关闭打印文件
except
abort;
end;
end;
=====================
在网上看到好多第三方的打印控件
我想问
ReportBuilder
ReportMachine
QuickReport
FastReport
这几种打印控件的优缺点
哪个最好用,哪个并发简单快捷?
这些都是报表工具,用来制作报表的,偶们公司现正在用FastReport,感觉还凑合,虽然有不少Bug,但是都还可以通过其它方法解决或避免。
听网友们说QuickReport还像还可以,但是说实话,这些由国外开发的报表工具有时候你会发现并不适合国内的需求,很令人郁闷,所以无论使用哪一个,都要有被其郁闷的心理准备。
话又说回来,用这种东西,必需要有钻研精神,hoho,这样才能更快更好的掌握其特点和使用方法,遇到的问题也就迎刃而解了
===============================
1.用Delphi编写打印程序的窍门
如果你想自己用Delphi编写一个打印程序,那么,下面这些技巧或许对你有所帮助。
1.获取显示当前打印机的分辨率
Windows下的打印分辨对打印程序有着至关重要的作用,如果你想知道打印机的分辨率,请在程序中加入一行:Show Message(+inttostr(GetDeviceCaps(printer.Handle,LOGPIXELSX))+chr(13)++inttostr(Ge tDeviceCaps(printer.Handle,LOGPIXELSY)));结果就一目了然了。
2.将结果直接送到打印机
Delphi提供了两种打印方式:一是将结果输送到Form,再调用Form的print方法将结果输送到打印机,二是将结果直接输送到打印机。
如果你采用第一种方式,则无论你怎样调整Form的PrintScal属性,打印出来的东西也不会让你满意。
因此建议采用第二种方式。
3.尽量不要使用AssignPrn
尽管AssignPrn简化了文本打印操作,使输出到打印机像输出到文件一样简单。
但简单带来的是一系列的不方便:你无法知道当前打印的行数,无法准确控制行距,无法灵活改变字体字形等等。
还是用打印机的Canvas属性进行打印吧。
4.用打印机的点数做度量单位
如果想让打印程序在任何打印机上都能正常地打印,你就必须改变你的度量单位。
如果采用固定的度量,不同分辨率的打印效果是不同的。
举例来讲:printer.Canvas.rectangle(0,0,360,720)在360×360的佳能4200SP上能打出一个1英寸宽、2英寸高的矩形,但在600×600的惠普6L上只能打出0.6英寸宽、1.2英寸高的矩形。
使用打印机的点数做为度量单位是一个明智的选择。
具体做法如下:VarPointX,PointY:integer;PointX:=GetDeviceCaps(printer.Handle,LOGPIXELSX);PointY :=GetDeviceCaps(printer.Handle,LOGPIXELSX);printer.Canvas.rectangle(0,0,PointX*1 ,PointY*2)这样,无论你使用什么样的打印机,都能得到一个1英寸宽、2英寸高的矩形。
5.添加打印程序单元
尽管Delphi在生成窗体时会自动在USES部分加入许多程序单元,但打印程序单元(Printers)却不在之列,要想使打印机正常工作和程序不出错,你还是老老实实手工给它加上吧。
(湖北杨德军)。