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;

深入QuickReport(二)

第二部分:深入QuickReprot例程   在应用中学习,在实践中进步,这是我学习QuickReport的最大感受,通过上面的介绍,我想你对QuickReport也有了一定的了解,那么下一步我们...
  • zang141588761
  • zang141588761
  • 2016年08月23日 10:27
  • 680

深入QuickReport(三)

第三部分:报表中的其他问题     通过前两部分的学习,我想你对QuickRep已经有了一定的掌握,在这部分我们对报表设计中的其他一些问题做一下简单介绍,也许这些你并不常用,但同样这些内容对于我...
  • zang141588761
  • zang141588761
  • 2016年08月23日 10:28
  • 732

微信万能预约V3.0颠覆式上线,快速、万能!

七天长假已经过完!我们又原地满血复活了~~ 同志们,严肃起来!小编今天要义正言辞地揭露一场“有组织、有预谋”的营销应用开发行动。这场行动带来的后果,简直无法想象。 历经千山万水、千呼万唤,多少个日...
  • u013597457
  • u013597457
  • 2016年10月08日 10:59
  • 204

用QuickReport实现Delphi多栏打印

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

Android打造万能的对话框Dialog(三)

打造万能的对话框Dialog(三) 已经写了两篇了,这下来一篇高级点的,仿照AlertDialog封装我们想要的Dialog的对话框 具体那种方式跟适合你,你自己来选,不过如果只是为了简单实...
  • jsonnan
  • jsonnan
  • 2017年05月27日 16:06
  • 425

android:打造万能通用适配器

本文原创,转载请注明出处。 1、前言 安卓项目中,listvie作为一个常见的控件,其适配器的写法是广大安卓开发者需要掌握和优化的技巧。 本文主要介绍一个通用的适配器BaseCommAdap...
  • q649381130
  • q649381130
  • 2016年06月29日 18:18
  • 7209

万能游戏框架

万能游戏框架       论学习方法   游戏框架演变过程   游戏开发难点       代码组织架构, 资源,网络, 3D数学 ,热更新   拖拽式和 查找式   单例式       ...
  • TRGVBZ
  • TRGVBZ
  • 2016年04月16日 21:37
  • 1079

程序中如何打印日志?(二)

前面博文中的打印日志方法太复杂,能不能简单一点呢?我能! //---------------------------------------------------------------------...
  • stpeace
  • stpeace
  • 2013年11月09日 11:21
  • 2369

python十个项目之----万能的XML

其实对于这个python小项目我感触的也不算很深刻,因为总是感觉和项目yi
  • hanST123
  • hanST123
  • 2014年07月28日 10:17
  • 1057

android万能驱动制作方法

from:http://blog.csdn.net/newtonnl/article/details/7913394 做android经常碰到某个手机找不到adb 驱动,或者为了适配装了N多驱动,其实...
  • lgl1170860350
  • lgl1170860350
  • 2016年07月03日 21:11
  • 604
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Quickreport万能打印程序
举报原因:
原因补充:

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