zoukankan      html  css  js  c++  java
  • 在QuickReport中实现多栏打印

       如果在Treport的DataSet属性中选定一个Table,那么QuickReport每次打印详细列表(BandType=rbDetail)属性的TQRBand时,系统会自动取出一个记录供打印,并将表中的记录指针移到下一位,这样程序无法控制表中记录指针的移动,就无法实现多栏打印。因此,只要程序不在Treport的DataSet属性选定任何表, QuickReport便不会控制表记录的提取。
       QuickReport特为其它类型数据打印提供了一个OnNeedData事件,QuickReport每次打印详细列表属性的TQRBand时,会触发这个事件,要求提供打印数据,如果程序在OnNeedData事件中编写运用表中数据提供打印资料,便能实现多栏打印。现例举实现一个Table1中Name项两栏打印的方法。
       1.在窗口上放TquickReport组件
       quickReport1,并在上面放Tband组件band1,将其BandType属性改为Detail。然后在Tband组件上并排放两个QRLabel组件QRLabel1和QRLabel2,并在quickReport1的OnNeedData事件中写如下代码:
       procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
      var
        I: integer;
      begin
          QRLabel1.Caption := '';
          QRLabel2.Caption := '';
    
        MoreData := True;
          if Table1.Eof then MoreData := False;
    
        for I:= 1 to 2 do
        begin
        if Table1.Eof then Break;
    
        case I of
         1: QRLabel1.Caption := Table1.FieldByName('Name').AsString;
         2: QRLabel2.Caption := Table1.FieldByName('Name').AsString;
        end;
    
        Table1.Next;
        end;
      end;

      2. 为了保证打印或者打印预览开始时Table1指针在第一条记录,在quickReport1的BeforePrint事件中写如下代码:

       procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
       var PrintReport: Boolean);
      begin
       Table1.First;
      end;

      这样,程序调用QuickRep1.Preview或者QuickRep1.Print便能预览或者打印到一个关于Name的从左至右、从上到下的多栏报表。

  • 相关阅读:
    团队作业2
    神琪宝贝
    自我介绍
    新博客破蛋日!
    关于mysql的索引原理与慢查询优化
    mysql主从复制(超简单)
    MySQL 主从复制与读写分离概念及架构分析
    nginx配置image_filter生成缩略图
    关于ueditor多图上传加水印
    linux下php调用root权限实现方案
  • 原文地址:https://www.cnblogs.com/wintalen/p/3275341.html
Copyright © 2011-2022 走看看