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
在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_FastReport解决ERP系统开发中单据打印的实例探索
图1:单据管理示意图摘要:本文用Delphi+Fastreport 为例介绍了用数据库后台存储单据文件前台进行调用很好的解决了后台存储与用户本地自定义设置之间的矛 盾,还介绍了通过编写通用式主从结构的单据打印程序快速解决各种单据的打印输出以及用cross-tab 技术解决交叉表样式报表的输出。
这些方法的 实现很好的解决了ER P 系统中单据输出和报表打印问题,同时较方便的实现了用户对单据和报表样式自定义的需求。
关键词:ER P 系统;后台;套打;交叉表;单据 中图分类号:T P302.1 文献标识码:A 文章编号:1003-9767(2011)05-0054-03下载:将存于后台表中的单据字段通过流文件方式保存至本地相 1. 单据文件的存储与用户自定义FastReport 中报表默认是以文件形式存储于各客户端本地系统 中,以其调用速度快而获得程序的首选,但这种方式更新时必须在各 客户端站点之间进行手动同步操作,给后期的报表维护带来了极大的不便,因此往往适用于站点数量较少的系统应用场合,在ER P 系统应用中,一般采用将FastReport 报表文件以image 字段的形式存储于后台数据库中,再通过相应的下载和上传操作实现对数据库内image 字段(即相应报表文件)的修改。
应的报表文件。
try SetStream := TFileStream.Create(ReportFileName, fmC reate orfmShareExclusive);// 保存相应字段内容到文件流中 TBlobField(ADOQueryBill.FieldByName('xt_bill_attach')). SaveToStream(SetStream);MessageDlg('报表文件下载成功!', mtInformation, [mbOk], 0);exceptMessageDlg('报表文件下载过程中遇到了错误!', mtError,[mbOk], 0);end; 上传至服务器:将重新设置的本地报表文件上传至后台表xt_bill 相应记录。
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中用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,开始新的一张表单。
delphi printerdialog 用法
delphi printerdialog 用法全文共四篇示例,供读者参考第一篇示例:Delphi是一种功能强大的编程语言,被广泛用于Windows平台的应用程序开发。
在Delphi中,有一个名为PrinterDialog的组件,可以帮助开发者轻松应用打印功能到他们的应用程序中。
本文将介绍如何使用Delphi的PrinterDialog组件来实现打印功能,并提供一些示例代码和技巧。
我们来了解一下PrinterDialog组件的基本用法。
PrinterDialog组件可以让用户选择打印机、纸张大小、打印范围等打印参数,并通过简单的调用函数来执行打印操作。
通过PrinterDialog组件,开发者可以在应用程序中实现用户友好的打印功能,提升用户体验。
在Delphi中,使用PrinterDialog组件的基本步骤如下:1. 创建PrinterDialog对象:在应用程序中创建一个PrinterDialog对象,用于实现打印操作。
2. 设置打印参数:通过PrinterDialog对象的属性设置打印参数,如选择打印机、设置纸张大小、设置打印范围等。
3. 调用打印函数:调用PrinterDialog对象的Print函数来执行打印操作,打印完成后可以进行相应的处理,如提示用户打印完成、保存打印结果等。
```delphiprocedure TForm1.Button1Click(Sender: TObject);beginPrinterDialog1.Title := '选择打印机';PrinterDialog1.Execute;if PrinterDialog1.Printer = '' thenShowMessage('未选择打印机')elsebeginPrinter.BeginDoc;Printer.Canvas.TextOut(100, 100, 'Hello, World!');Printer.EndDoc;end;end;```在上面的示例代码中,我们通过一个按钮的点击事件来触发打印操作。
在Delphi中实现数据分析模块的动态报表
在Delphi中实现数据分析模块的动态报表⼀、问题的提出Delphi作为强⼤的数据库开发⼯具,正被愈来愈多的编程⼈员所采⽤,"聪明的程序员⽤Delphi"更形象⽣动的道出⼴⼤程序员的⼼声,但这并不意味着所有功能的实现都⾮常容易,例如,笔者在开发军队的某个信息系统中,就在为数据分析模块中DecisionGrid1控件的数据进⾏报表输出时⾛了不少的弯路。
⼴⼤的Delphi的爱好者在今后的学习或⼯作中也有可能会遇到类似的问题,⽽在许多参考书中,很少有甚⾄没有关于它们的解决⽅法,于是,我想花费⼀点时间把它整理出来,以供⼤家参考。
本⽂中报表动态⽣成的公⽤模块具有很⼤的灵活性和易操作性,其中的思路、实现的功能和通⽤性等⽅⾯的优缺点就由⼤家看了本⽂后⾃有定论。
⼆、建⽴报表的动态输出公⽤模块下⾯,结合公司⼈事管理信息系统说明其实现的⽅法和技术。
1、基本思路:⾸先从DecisionGrid1中获得报表所需数据,放到⼆维数组PA中,然后在C:\DataWork中动态创建⼀个数据表tjb.dbf,存放报表数据,最后⽤T able1与tjb.dbf相连接,以后⼯作就与⼀般的动态输出报表(如查询报表)相类似,在这⾥我就⽆须赘述了。
2、建⽴窗体⽂件:放⼊六个⽤于数据分析的常⽤控件DecisionQuery1、DecisionSource1、DecisionCube1、DecisionGraph1、DecisionPivot1、DecisionGrid1,设置DecisionSource1的decisionCube属性为decisionCube1,decisionCube1的Dataset属性为decisionQuery1、decisionQuery1的DatabaseName属性为c:\datawork;⼀个Table1控件,⽤于连接数据表tjb.dbf;⼀个QuickRep1控件,⽤于数据的报表输出;两个Button1和Button2控件,其Caption分别设为"报表输出"和"返回"。
delphi fastreport 用法
delphi fastreport 用法Delphi FastReport 用法Delphi 是一种强大的编程语言,它提供了快速开发应用程序的能力。
而 FastReport 是一个插件,能够为 Delphi 提供报表设计和生成功能。
本文将介绍 Delphi FastReport 的用法,包括报表设计、数据源使用、导出和打印等。
1. 报表设计打开 Delphi,创建一个新的项目,加入 FastReport 模块后,双击报表设计器,进入报表设计界面。
在左侧的工具栏中,有各种控件,如标签、文本框、图像等。
可以将这些控件拖到报表上,设置它们的属性,如字体、大小、颜色等。
2. 数据源使用在报表设计中,如何引用数据源呢?首先需要将数据源组件(如FIBPlus、IBX、ADO 等)添加到 Delphi 项目中。
然后,可以在报表设计器中找到 Data Tree 栏,在其中选择需要使用的数据源和数据表。
3. 报表导出在制作完报表后,需要将其导出为其他格式,比如 PDF、Excel、Word、HTML 等。
FastReport 在导出前,需要安装相关的导出 DLL 文件。
再使用 Export 模块,选择需要导出的文件格式,单击导出即可。
4. 报表打印制作好的报表导出后,还需要将其打印出来。
EasyPrint 模块为FastReport 提供了强大的打印功能。
首先需要在程序中载入EasyPrint 模块,并设置打印参数。
接着使用 Report.Print 方法,即可将报表打印出来。
总结:以上是 Delphi FastReport 的简单用法介绍,具体使用还需要根据实际情况进行调整。
同时,建议多多研究相关的 API 文档和示例代码,以加深对 FastReport 和 Delphi 的理解和掌握。
Delphi程序实现打印功能
Delphi程序实现打印功能Delphi程序实现打印功能预备内容:一、新建一个窗体(Form1)二、在窗体上加memo1、Button1、Printdialog1这三个组件(都自带了的)。
思路过程:一、在程序代码页,最上边部分,有个粗体字Users,你在它下面加一个printers(这个不是粗体的)。
二、双击button按钮,咱要在这里写代码了。
三、先定义一个line变量,类型是integer,用来控制打印的行数。
再定义一个files为system.text,告诉程序这个东西是要它打印的文件。
四、将文件变量(files)通过assignprn函数来提交到打印机。
//可以这么理解:咱拿了个文件,命令打印机说:“呆会儿你把这个文件给我打印出来。
”五、通过rewrite函数,打开要输出的文件(files)。
//这个就理解为:打印机很无奈的拿了文件过去,翻看着。
六、设置文件(files)在打印机上的字体。
七、通过writeln函数,打印文(files)件的每行内容八、打印完了后,关闭要打印的文件。
简化过程(其实就是思路):一、在Users下写个printers二、定义两个变量。
三、通过assignprn函数把文件传到打印机上。
四、通过rewrite函数,让打印机打开文件。
五、设置字体。
六、打印每行内容七、关闭文件。
具体代码:{在Users下面加个printers}varline:integer; //定义一个line变量,用于下面控制打印各行内容files:system.text; //告诉系统说files是文本文件,是要打印机打印的文件beginif printdialog1.execute then //当printdialog1执行后beginassignprn(files); //通过assignprn函数将要打印的文件交给打印机rewrite(files); //让打印机打开文件准备打印printer.canvas.font.size:=12; //canvas是打印机的画板,用来打印文件的,直接设置字体for line:=0 to memo1.lines.count-1 do //以下是循环memo1的每个行beginwriteln(files,memo1.lines[line]); //打印每行内容 writeln(文件名,文本的某个行);end;system.close(files); //打印完了就关闭要打印的文件end;end;end;。
Delphi7 集成报表打印工具Rave Reports 5
Delphi7 集成报表打印工具Rave Reports 5.0之初体验早听说Borland公司发布了Delphi的新版本Delphi 7 Studio™,完全支持Microsoft .NET®框架的能力, 是一个真正针对Windows平台上的跨平台快速开发(RAD)环境。
作为一个Delphi爱好者和程序开发人员,当然想跟上技术发展的步伐,尝试一下Delphi 7 Delphi 7 Studio™的新特性和功能。
于是,我迫不及待的从Borland网站下载了试用版本,虽然Download的时间很长,但是还是满怀期待的等待下载完成。
下载完了即进行安装,安装过程和以往的版本D5,D6的差不多,只是安装界面和安装说明更漂亮,更着重介绍对.net框架支持的新功能。
好了,安装完成,下面就开始激动人心的试用体验了!首先从程序组里打开Delphi,现在它的程序名已经换为了Delphi7,其他菜单项没有变化。
打开了主界面,令人耳目一新,IDE快捷键的图标和菜单是仿Windows XP 风格的,比以前漂亮很多。
下面是Delphi 7 IDE的主界面控件面板中还是提供了相当多的控件,仔细一看,发现和Delphi6有些不同,呵呵,原来没有了Qreport控件组,而取而代之以Rave报表设计打印控件组,而且在Tools菜单中有Rave Designer报表设计工具,呵呵,以前对Qreport用不惯的朋友们,现在可有福了:)。
呵呵,再往下看,令人激动的东西还在后面呢,在Indy的控件系列中又增加了Indy Intercepts,Indy I/O Handlers两个控件组,不明白什么用场?我们还是看看帮助吧。
哦,原来是和数据传输和压缩加密有关的啊,以后再慢慢看具体控件的说明吧。
咦,后面怎么又多了IW Standard,IW Data,IW Client Site,IW Control四个控件组,IW,这又是什么东东?莫非是IntraWeb的缩写,不管了,先放一个IWApplet控件在窗口上吧,嗯?出错了,”Intraweb controls can only be placed on IntraWeb forms or Delphi Frames.”呵呵,明白了,这四个控件组是专为设计Intraweb程序准备的啊,听说Intraweb可以设计四种Web Server类型的程序:ISAPI/NSAPI; Apache versions 1 and 2; CGI (page mode only); Windows services,以后Delphi程序员开发WebServices又多了一种途径。
delphi实现打印报表功能
delphi里自带有打印相关控件吗?怎么实现呀?打印dagrid表内容,或者说memo,Listbox,或者几个edit的内容。
谢谢uses printersvarlines:integer;prntext:system.text;beginif printdialog1.execute thentryassignprn(prntext); //将PRNTEST分配给打印机rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件printer.canvas.font:=memo1.font;//把当前MEMO1的字体指定给打印对象的CANVAS的字体属性for lines:=0 to memo1.lines.count-1 dobeginwriteln(prntext,memo1.lines[lines]);end;//把MEMO的内容写到打印机对象system.close(prntext); //关闭打印文件exceptabort;end;end;=====================在网上看到好多第三方的打印控件我想问ReportBuilderReportMachineQuickReportFastReport这几种打印控件的优缺点哪个最好用,哪个并发简单快捷?这些都是报表工具,用来制作报表的,偶们公司现正在用FastReport,感觉还凑合,虽然有不少Bug,但是都还可以通过其它方法解决或避免。
听网友们说QuickReport还像还可以,但是说实话,这些由国外开发的报表工具有时候你会发现并不适合国内的需求,很令人郁闷,所以无论使用哪一个,都要有被其郁闷的心理准备。
话又说回来,用这种东西,必需要有钻研精神,hoho,这样才能更快更好的掌握其特点和使用方法,遇到的问题也就迎刃而解了===============================1.用Delphi编写打印程序的窍门如果你想自己用Delphi编写一个打印程序,那么,下面这些技巧或许对你有所帮助。
用DelphiFastReport解决ERP系统开发中单据打印的实例探索.doc
用Delphi+FastReport解决ERP系统开发中单据打印的实例探索5700字摘要:本文用Delphi+Fastreport为例介绍了用数据库后台存储单据文件前台进行调用很好的解决了后台存储与用户本地自定义设置之间的矛盾,还介绍了通过编写通用式主从结构的单据打印程序快速解决各种单据的打印输出以及用cross-tab技术解决交叉表样式报表的输出。
这些方法的实现很好的解决了ERP系统中单据输出和报表打印问题,同时较方便的实现了用户对单据和报表样式自定义的需求。
zuoe(‘xt_bill_attach’)).LoadFromStream(SetStream); try Post; MessageDlg(‘报表文件上传成功!’, mtInformation, [mbOk], 0); Requery; GotoBookmark(OldBookMark); except MessageDlg(‘报表文件上传过程中遇到了错误,上传失败!’, mtError, [mbOk], 0); end; end; 2、通用的主从式单据打印解决方案:在ERP系统应用中,单据种类复杂,有采购计划、采购订单、采购收货通知单、销售订单、销售出库通知单、库存调拨单、库存领用单等等,但仔细分析后我们发现其结构均为主从式的数据模型,为了找到通用的解决方案,我们在Delphi项目的DM模块下,增加ADOQueryParent作为主表的数据源,增加ADOQueryChild作为子表的数据源,增加frDBDataSetOrder作为FastReport数据源,增加frReportOrder作为FastReport作为报表控件,前端通过后台数据库的视图实现用户对数据源的控制,减少了对前台应用程序的维护频度,实现了报表文件、访问方式和数据源三者既相互独立,又兼顾统一。
2.1调用报表的过程描述如下:procedure PrintCheck(ReportName, --报表名称MasterViee, --主项数据视图名称MasterKeyFieldName, --主项数据关键字段名称DetailViee, --明细项数据视图名称DetailKeyFieldName, --明细数据关联字段名称SortByField --数据源排序字段名称: string; KeyFieldV alue: variant); 2.2过程代码如下:procedure PrintCheck(ReportName, MasterViee, MasterKeyFieldName, DetailViee, DetailKeyFieldName, SortByField: string; KeyFieldV alue: variant); Begin // 指定主项数据源‘ + MasterViee + ‘ e + ‘=:’ + MasterKeyFieldName); Parameters.Items[0].V alue := KeyFieldValue; Open; end; // 指定明细项数据源‘ + DetailViee + ‘ DetailKeyFieldName + ‘=:’ + DetailKeyFieldName); SQL.Add(‘ order by ‘ + SortByField); Parameters.Items[0].V alue := KeyFieldV alue; Open; end; // 装载相应单据 e from xt_bill eters.Items[0].V alue := ReportName; Open; if (DM.frDBDataSetOrder.DataSet DM.ADOQueryChild)then DM.frDBDataSetOrder.DataSet := DM.ADOQueryChild; BlobField(FieldByName(‘xt_bill_attach’)); // 从相应字段进行装载Title := FieldByName(‘xt_bill_name’).V alue; Sho示方式外经常会遇到交叉表式的数据输出要求,依靠传统的报表设计工具和方式显得特别麻烦,FastReport提供了一个Cross-tab的对象可以解决这个问题,但笔者经过多次反复测试后发现只有数据源提供正确且设置合理才会得到我们想要的输出格式。
delphi rzlistview report用法
delphi rzlistview report用法关于Delphi RzListView Report的用法,以下是一步一步的详细回答。
首先,我们需要了解什么是Delphi和RzListView,以及什么是Report 功能。
Delphi是一种使用Object Pascal编写的集成开发环境(IDE),由Embarcadero Technologies开发。
它是一个用于快速开发可视化桌面和移动应用程序的工具。
Delphi提供了一个可视化界面设计工具和丰富的组件库,使开发人员能够轻松地创建功能强大的应用程序。
RzListView是Delphi中的一个列表视图控件,它是在TListView基础上进行改进和扩展的。
RzListView提供了一些额外的功能和属性,使开发人员能够更方便地对列表视图进行操作和控制。
Report功能是指通过生成报表来呈现数据的功能。
报表通常以表格的形式呈现,其中包含了一系列数据以及相应的统计信息。
使用报表功能可以将数据以易读易懂的方式展示给用户,方便他们进行数据分析和决策。
在Delphi中使用RzListView控件的报表功能,我们需要按照以下步骤进行操作:第1步:准备数据在生成报表之前,我们首先需要准备好要展示的数据。
可以通过从数据库中查询数据或者手动创建一个数据集来获取数据。
确保数据集中包含了我们想要在报表中展示的所有字段。
第2步:设计报表模板一般情况下,报表都带有一个模板,定义了报表的格式和布局。
在Delphi 中,我们可以使用RzListView控件来设计报表模板。
在设计模板时,我们需要设置列表的标题、列宽和对齐方式,以及其他一些视觉效果。
可以使用RzListView的设计时属性编辑器来完成这些设置。
第3步:填充数据设计完报表模板之后,我们需要将数据填充到报表中。
可以通过遍历数据集,将每一条数据逐一添加到RzListView控件中。
在添加数据时,可以根据需要设置每个列的值,以及其他一些列相关的属性,如字体颜色、背景颜色等。
Excel 2000:用Delphi自动生成报表
Excel 2000:用Delphi自动生成报表摘要:Excel是当前最流行的数据报表制作工具。
本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换,讨论了报表制作工程中的一些细节性问题。
关键字:Delphi,Excel,报表引言数据报表作为企事业单位上报和下达的重要信息载体,随着信息化建设的不断推进,在实际的工作中得到了前所未有的应用。
因此,数据报表已经成为管理信息系统中重要的一项功能,并且,由于数据的多样性和统计信息的增加,数据报表的系统实现变得越来越复杂。
Delphi是一个高效的可视化数据库管理信息系统开发工具,.但是Delphi开发环境中提供的报表控件在制作复杂报表时显得不够理想,不管是以前版本提供的Quick Report控件组,还是Delphi 7提供的Rave控件组,都不能让用户对生成的报表进行改动,且程序控制很难实现。
Excel作为现代办公常用的电子表格制作工具,以它的易操作性和实用性,得到了各行业办公人员的青睐。
本文根据实际应用实践,介绍利用Delphi编程控制Excel生成报表的各种方法。
Delphi控制Excel的方法1 创建Excel文件要在Delphi中控制Excel,就必须用到OLE自动化。
现在一般采用OLE2来创建OLE对象,当激活一个OLE对象时,服务器程序仅在容器程序内部激活,这就是所谓的“就地激活”(in-place activation)。
创建Excel文件时,先创建一个OLE对象,然后在对象中建立工作表worksheet,如函数createExcel所示:function createExcel:variant;varv:variant;sheet:variant;beginv:=createoleobject('Excel.Application');//创建OLE对象v.visible:=true;v.workbooks.add(-4167); //添加工作表v.workbooks[1].sheets[1].name:='test';sheet:=v.workbooks[1].sheets['test'];return v;end;2 数据表格控制Excel表格的控制,主要包括数据的导入、修改;单元格的合并、边框的控制;表格的复制、粘贴等。
delphi fastreport 打印简单例子
delphi fastreport 打印简单例子以下是一个使用Delphi和FastReport打印的简单例子:1. 首先,打开Delphi并创建一个新的VCL应用程序项目。
2. 在工具栏上找到FastReport组件,在主窗体上拖放一个`TfrxReport`组件。
3. 在菜单中选择"File" -> "New" -> "Data",创建一个新的数据集。
4. 在数据集设计器中,添加一些字段,并添加一些数据。
5. 返回主窗体,在Form的`OnCreate`事件中,添加以下代码:```delphiprocedure TForm1.FormCreate(Sender: TObject);varReport: TfrxReport;Designer: TfrxDesigner;beginReport := TfrxReport.Create(nil);Designer := TfrxDesigner.Create(nil);try// 加载FastReport模板文件Report.LoadFromFile('报表文件路径');// 将数据集与报表关联Report.DataSets.Add(DataSet1);// 显示报表设计界面Designer.Report := Report;Designer.ShowModal;// 打印报表//Report.PrepareReport;//Report.Print;finallyDesigner.Free;Report.Free;end;end;```6. 运行应用程序,点击按钮时将打开FastReport设计器界面,您可以在其中设计和预览报表。
7. 如果要打印报表,取消`FormCreate`方法中的注释,并确保您在报表文件路径中指定了正确的模板文件路径。
8. 运行应用程序,点击按钮即可打印报表。
Delphi FastReport报表常用方法
Delphi FastReport报表常用方法1.单据中有多行数据,但预览时只显示部分内容,或者打印内容行与行之间有间隔OR属性中:设置RowCount=0,Start New Page为False;Stretched为True.说明:RowCount:控制总共打印几行;RowCount=0是打印全部;Start New Page:打印前先跳页;每页打印一行;Stretch:表身自动伸缩根据表身内容;2.在打印中设置金额或数量的小数位数FASTREPOR属性中:使用DisplayFormat(数据显示格式)——数字——1234.50%2.0f:以整数形式显示;%2.2f:显示两位小数;%2.3f:显示三位小数位,可根据情况进行调整。
3.在打印中设置日期/时间的格式FASTREPOR属性中:使用DisplayFormat(数据显示格式)——日期/时间——11.28.2002mm.dd.yyyy:显示月.日.年mm.dd:显示月.日mm:显示两位的月4.当栏位的值为零时显示为空FASTREPOR属性中:设置HideZeros(数字前面的0是否显示)为True5.自动换行1)选择数据单元进行群组;2)StretchMode为smMaxHtight;WordWrap为True;Stretched为True.说明:StretchMode:对象伸缩的行为;WordWrap:文本是否自动换行;6.合计[SUM(<进/销/退/折表身档."AMTN_NET">,MasterData2)]7.每页合计将定义好的合计函数放到‘栏尾’中即可。
8.全表合计将定义好的合计函数放到‘报表合计’中即可。
9.金额大写在报表设计中使用函数:ConbertNumToChinese()合计金额大写:[ConvertNumToChinese(SUM(<进/销/退/折表身档."AMTN_NET">,MasterData2))]负数合计金额大写:[ConvertNumToChinese(Abs(SUM(<进/销/退/折表身档."AMTN_NET">,MasterData2)))]10.报表中打印行数在报表设计中使用变量——系统变量Line#11.连打1)单据——速查,查出要打印的单据;2)打印——查询数据——预览——打印,选择多张单据进行连打。
delphi打印小票源码
//取得字符的高度function CharHeight:Word;varMetrics:TTextMetric;beginGetTextMetrics(Printer.Canvas.Handle, Metrics); Result := Metrics.tmHeight;end;//file://取得字符的平均宽度function AvgCharWidth:Word;varMetrics:TTextMetric;beginGetTextMetrics(Printer.Canvas.Handle, Metrics); Result := Metrics.tmAveCharWidth;end;//file://取得纸张的物理尺寸---单位:点function GetPhicalPaper:TPoint;varPageSize :TPoint;begin//file://PageSize.X;纸张物理宽度-单位:点//file://PageSize.Y;纸张物理高度-单位:点Escape(Printer.Handle, GETPHYSPAGESIZE, 0,nil,@PageSize);Result := PageSize;end;//file://2.取得纸张的逻辑宽度--可打印区域//file://取得纸张的逻辑尺寸function PaperLogicSize:TPoint;varAPoint:TPoint;beginAPoint.X := Printer.PageWidth;APoint.Y := Printer.PageHeight;Result := APoint;end;//file://纸张水平对垂直方向的纵横比例function HVLogincRatio: Extended;varAP:TPoint;beginAp := PaperLogicSize;Result := Ap.y/Ap.X;end;//file://取得纸张的横向偏移量-单位:点function GetOffSetX: Integer;beginResult := GetDeviceCaps(Printer.Handle, PhysicalOffSetX);end;//file://取得纸张的纵向偏移量-单位:点function GetOffSetY: Integer;beginResult := GetDeviceCaps(Printer.Handle, PhysicalOffSetY);end;//file://毫米单位转换为英寸单位function MmToInch(Length:Extended):Extended;beginResult := Length/25.4;end;//file://英寸单位转换为毫米单位function InchToMm(Length:Extended):Extended;beginResult := Length*25.4;end;//file://取得水平方向每英寸打印机的点数function HPointsPerInch:Integer;beginResult := GetDeviceCaps(Printer.Handle, LOGPIXELSX);end;//file://取得纵向方向每英寸打印机的光栅数function VPointsPerInch:Integer;beginResult := GetDeviceCaps(Printer.Handle, LOGPIXELSY) end;//file://横向点单位转换为毫米单位function XPointToMm(Pos:Integer):Extended;beginResult := Pos*25.4/HPointsPerInch;end;////file://纵向点单位转换为毫米单位function YPointToMm(Pos: Integer):Extended;beginResult := Pos*25.4/VPointsPerInch; end;//file://设置纸张高度-单位:mmprocedure SetPaperHeight(Value: integer);varDevice :array[0..255] of char;Driver :array[0..255] of char;Port :array[0..255] of char; hDMode :THandle;PDMode :PDEVMODE;begin//file://自定义纸张最小高度127mmif Value < 127 then Value := 127;//file://自定义纸张最大高度432mmif Value > 432 then Value := 432;Printer.PrinterIndex := Printer.PrinterIndex;Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 thenbeginpDMode := GlobalLock(hDMode);if pDMode <> nil thenbeginpDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_PAPERLENGTH;pDMode^.dmPaperSize := DMPAPER_USER;pDMode^.dmPaperLength := Value * 10;pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL; pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);end;end;Printer.PrinterIndex := Printer.PrinterIndex;end;//file://设置纸张宽度:单位--mmProcedure SetPaperWidth(Value: integer);varDevice :array[0..255] of char;Driver :array[0..255] of char;Port :array[0..255] of char; hDMode :THandle;PDMode :PDEVMODE;begin//file://自定义纸张最小宽度76mm if Value < 76 then Value := 76;//file://自定义纸张最大宽度216mm if Value > 216 then Value := 216;Printer.PrinterIndex := Printer.PrinterIndex;Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 thenbeginpDMode := GlobalLock(hDMode);if pDMode <> nil thenbeginpDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE orDM_PAPERWIDTH;pDMode^.dmPaperSize := DMPAPER_USER;//file://将毫米单位转换为0.1mm单位pDMode^.dmPaperWidth := Value * 10;pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL; pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);end;end;Printer.PrinterIndex := Printer.PrinterIndex;end;//file://在(Xmm, Ymm)处按指定配置文件信息和字体输出字符串procedure TFrmADDHYXF.PrintText(X,Y:Extended;Txt:string;ConfigFileName:string;FontSize:Integer=12);varOrX, OrY:Extended;Px, Py:Integer;AP:TPoint;Fn:TStrings;FileName:string;OffSetX, OffSetY:Integer;begin//file://打开配置文件,读出横向和纵向偏移量tryFn := TStringList.Create;FileName := ExtractFilePath(Application.ExeName) + ConfigFileName; if FileExists(FileName) thenbeginFn.LoadFromFile(FileName);//file://横向偏移量OffSetX := StrToInt(Fn.Values['X']);//file://纵向偏移量OffSetY := StrToInt(Fn.Values['Y']);endelsebegin//file://如果没有配置文件,则生成Fn.Values['X'] := '0';Fn.Values['Y'] := '0';Fn.SaveToFile(FileName); end;finallyFn.Free;end;X := X + OffSetX;Y := Y + OffSetY;// file://因为是绝对坐标,因此,不用换算成相对于Y轴坐标Py := Py - GetOffSetY;Px := Px + 2 * AvgCharWidth; := 'xx';Printer.Canvas.Font.Size := 8;//file://Printer.Canvas.Font.Color := clGreen;Printer.Canvas.TextOut(Px, Py, Txt);end;例子:writeln(F,'');PrintText(-3, kuang, trim(‘’), 'config.txt');PrintText(13, kuang, trim(‘’), 'config.txt');PrintText(20, kuang, trim(‘’), 'config.txt');PrintText(30, kuang, trim(‘’), 'config.txt');PrintText(37, kuang, trim(‘’), 'config.txt');。
Delphi编程中报表网格打印的实现
Delphi编程中报表网格打印的实现
李芳萍;王俊波
【期刊名称】《铁路计算机应用》
【年(卷),期】2003(012)0z1
【摘要】通过创建对数据表的打印程序,利用对打印机画布属性的处理,实现了数据报表的网格打印.
【总页数】3页(P191-193)
【作者】李芳萍;王俊波
【作者单位】襄樊铁路分局,枝江机务段,枝江,443212;襄樊铁路分局,枝江机务段,枝江,443212
【正文语种】中文
【中图分类】TP31
【相关文献】
1.基于.NETB/S模式中水晶报表打印与套打的实现 [J], 莫丽萍
2.浅析在VFP程序中利用Excel实现报表打印功能 [J], 上官圣洁
3.利用地址调用在Excel中实现报表打印功能 [J], 香丽芸
4.VFP 9.0中实现多种自定义纸张格式的报表打印 [J], 徐小栋
5.管理信息化中水晶报表的打印与精确打印的实现 [J], 艾灵仙
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows下的打印分辨对打印程序有着至关重要的作用,如果你想知道打印机的分辨率,请在程序中加入一行:Show Message(+inttostr(GetDeviceCaps(printer.Handle,LOGPIXELSX))+chr(13)++inttostr(GetDeviceCaps(printer.Handle,LOGPIXELSY)));结果就一目了然了。
话又说回来,用这种东西,必需要有钻研精神,hoho,这样才能更快更好的掌握其特点和使用方法,遇到的问题也就迎刃而解了
===============================
1.用Delphi编写打印程序的窍门
如果你想自己用Delphi编写一个打印程序,那么,下面这些技巧或许对你有所帮助。
delphi里自带有打印相关控件吗?怎么实现呀?打印dagrid表内容,或者说memo,Listbox,或者几个edit的内容。谢谢
uses printers
var
lines:integer;
prntext:system.text;
begin
if printdialog1.execute then
for lines:=0 to memo1.lines.count-1 do
begin
writeln(prntext,memo1.lines[lines]);
end;
//把MEMO的内容写到打印机对象
system.close(prntext); //关闭打印文件
哪个最好用,哪个并发简单快捷?
这些都是报表工具,用来制作报表的,偶们公司现正在用FastReport,感觉还凑合,虽然有不少Bug,但是都还可以通过其它方法解决或避免。
听网友们说QuickReport还像还可以,但是说实话,这些由国外开发的报表工具有时候你会发现并不适合国内的需求,很令人郁闷,所以无论使用哪一个,都要有被其郁闷的心理准备。
try
assignprn(prntext); //将PRNTEST分配给打印机
rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件
printer.canvas.font:=memo1.font;
//把当前MEMO1的字体指定给打印对象的CANVAS的字体属性
尽管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英寸高的矩形。
2.将结果直接送到打印机
Delphi提供了两种打印方式:一是将结果输送到Form,再调用Form的print方法将结果输送到打印机,二是将结果直接输送到打印机。如果你采用第一种方式,则无论你怎样调整Form的PrintScal属性,打印出来的东西也不会让你满意。因此建议采用第二种方式。
3.尽量不要使用AssignPrn
except
abort;
end;
end;
=====================
在网上看到好多第三方的打印控件
我想问
ReportBuilder
ReportMachine
QuickReport
FastReport
这几种打印控件的优缺点
5.添加打印程序单元
尽管Delphi在生成窗体时会自动在USES部分加入许多程序单元,但打印程序单元(Printers)却不在之列,要想使打印机正常工作和程序不出错,你还是老老实实手工给它加上吧。(湖北 杨