Quickreport万能打印程序

原创 2004年07月14日 16:07:00

作程序经常使用报表打印,使用delphi编程最长用的是使用quickreport做报表打印,rave是在delphi7中才出现的,我用quickreport做了一个万能打印程序,由于时间紧迫,没有时间优化和美化,欢迎网友修改。

他的基本思想是:动态的取dataset中的列,动态的生成报表,程序如下:

unit unit_QReport_lxr;

interface

uses Windows, SysUtils, Messages, Classes, Graphics, Controls,
  StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls, DB, ADODB,Dialogs;

type
  TQReport_lxr = class(TQuickRep)
    DetailBand1: TQRBand;
    TitleBand1: TQRBand;
    bb_title: TQRLabel;
    ColumnHeaderBand1: TQRBand;
  private

  public
    function bb_prepare(objAdoQuery:TDataSet;haveFirstCol:boolean):boolean;
  end;

var
  QReport_lxr: TQReport_lxr;

implementation

{$R *.DFM}
function TQReport_lxr.bb_prepare(objAdoQuery:TDataSet;haveFirstCol:boolean):boolean;
file://haveFirstCol:boolean;是否打印dataset中的第一列,true打印,false 不打印
var
     la:TQRLabel ;
     te:TQRDBText;
     row_la:integer;
     row_te:integer;
     re_width:integer;
     left_bj:integer;
     i:integer;
     j:integer;
     m:integer;
     hafn:integer;
begin

        if  (objAdoQuery.Fields.Count<=0)then
        begin
             messagedlg('请您先做查询,再打印报表!',mtInformation,[mbyes],0);
             result:=false;
             exit;
        end;
        self.DataSet:=objAdoQuery;
        if objAdoQuery.RecordCount<>0 then
        begin
             row_la:=0;
             row_te:=0;
             left_bj:=0;
             j:=0;
             re_width:=DetailBand1.Width;
             m:=re_width div 100;

             file://注意:是否放弃objAdoquery中的第一列
            if haveFirstCol
            then hafn:=0
            else hafn:=1;

             for i:=hafn  to objAdoQuery.FieldCount-1 do
             begin
                  if j=m then
                  begin
                       left_bj:=0;
                       row_la:=row_la+1;
                       row_te:=row_te+1;
                       j:=0;
                       ColumnHeaderBand1.Height:=ColumnHeaderBand1.Height+27;
                       DetailBand1.Height:=DetailBand1.Height+27;
                  end;
                  la:=TQRLabel.Create(self);
                  la.Caption:=objAdoQuery.Fields[i].FieldName;
                  la.Width:=100;
                  la.Height:=17;
                  la.Left:=left_bj;
                  la.Top:=30+(la.Height+10)*row_la;
                  la.Parent:=ColumnHeaderBand1 ;


                  te:=TQRDBText.Create(self);
                  te.DataSet:=objAdoQuery;
                  te.DataField:=objAdoQuery.Fields[i].FieldName;
                  te.Width:=100;
                  te.Height:=17;
                  te.Left:=left_bj;
                  te.Top:=30+(te.Height+10)*row_te;
                  te.Parent:=DetailBand1;
                  te.AutoStretch:=true;

                  left_bj:=(j+1)*105;
                  j:=j+1;
             end;
        end;
      result:=true;
    end;
end.

调用程序如下:

procedure TFrm_sbcx_yin.BitBtn_xxxx_dyClick(Sender: TObject);
var
  qp:TQReport_lxr;
begin
  qp:=TQReport_lxr.Create(self);
  qp.bb_title.Caption:='设备类别查询';
  if qp.bb_prepare(ADOQuery_xxxx,false)
  then begin
    qp.Prepare;
    qp.Preview;
    qp.hide;
  end;
  qp.free;
end;

关于delphi里面使用QUICK REPORT 打印的种种问题

1.使用针式打印机连续打印,走纸的文件解决, 设计的时候:quick report选择cusomter paper,打印的时候,选择打印机纸张大小为实际一致的纸张,如果没有那么自定义纸张单位换算:  ...
  • liuhualiang
  • liuhualiang
  • 2004-08-02 11:21:00
  • 2773

QuickReport通用报表打印程序

  unit unit_QReport_lxr;{    模块名:通用报表打印    作者:尹曙光    开发日期:2004-07-15    网址:www.sinoprise.com    本程序适...
  • newsunet
  • newsunet
  • 2004-07-15 17:56:00
  • 1943

用QuickReport实现Delphi多栏打印

原帖地址 : http://old.uplook.cn/biancheng/7/76090/   在很多有关Delphi的书籍中,都没有讲解如何实现一个打印项的多栏打印,而现实生活中往往有许多报表...
  • piaoyao424
  • piaoyao424
  • 2013-02-25 09:18:37
  • 690

delphi开发学习五:QuickReoprt报表控件使用实例

报表是数据库应用程序设计中非常重要的一部分,数据库应用程序通常都要生成报表,并且打印出来。      在Delphi7.0中,默认情况下没有直接使用的QuickReport组件,使用时需先进行手工安装...
  • u011846249
  • u011846249
  • 2015-08-20 21:46:00
  • 3019

Delphi 报表 Quickreport使用

从昨天晚上开始一直在弄报表,最后发现只是一个地方没有设置对而已。小计如下。 首先放置这两个控件并相应进行设置,TADOConnection;TADOQuery;当然Query里最好填写SQL语句,并...
  • maddenedsnail
  • maddenedsnail
  • 2012-11-27 11:25:57
  • 461

QuickReport 4.0.3 自定义纸张有 问题

QuickReport 4.0.3版本的报表系统有问题,该版本当你设置自定义纸张的时候,并不能真正的设置自定义纸张,虽然在里面设置的是想要的纸张大小,但是当打印出来的时候,还是安A4往外打...
  • liuhualiang
  • liuhualiang
  • 2004-09-10 19:56:00
  • 1269

FastReport与QuickReport的优缺对比

FastReport(FR)与QuickReport(QR)的优缺对比从我FR与QR的使用感受来看,现在各自的主要优缺点例出,给朋友们参考:1>QR优点,FR的缺点A、很方便的制作中国式报表,即主数据...
  • baronyang
  • baronyang
  • 2006-04-05 17:49:00
  • 2882

Delphi QuickReport 分组— QRGroup

分组字段不能用中文 分组字段不能用中文 分组字段不能用中文
  • sunwayj
  • sunwayj
  • 2017-02-05 16:55:03
  • 268

delphi quickreport 打印时报 stackoverflow问题处理

问题截图如下: 经检查,发生这种情况的原因是: 1、代码中队quick report报表设置了以下的属性: fmKindProductCard.qrRepareSmallCard...
  • jzt_designer
  • jzt_designer
  • 2016-12-09 17:58:05
  • 495

QuickReport在Win2000中实现自定义纸张的打印方法

一、QuickReport的设置:1、将QuickReport的PageSize属性设为Custom;2、设定纸张的长度、宽度及边距等信息;3、将QuickReport的PageSize的属性改为De...
  • chelen_jak
  • chelen_jak
  • 2010-07-27 17:34:00
  • 1450
收藏助手
不良信息举报
您举报文章:Quickreport万能打印程序
举报原因:
原因补充:

(最多只允许输入30个字)