用QuickReport實現Delphi多欄打印

原帖地址 : http://old.uplook.cn/biancheng/7/76090/

 

在很多有關Delphi的書籍中,都沒有講解如何實現一個打印項的多欄打印,而現實生活中往往有許多報表要求同一項目多欄打印。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

   MoreData := True;

   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;

   if Table1.Eof then MoreData := False;

  end;

  2. 爲了保證打印或者打印預覽開始時Table1指針在第一條記錄,在quickReport1的BeforePrint事件中寫如下代碼:

  procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;

   var PrintReport: Boolean);

  begin

   Table1.First;

  end;

  這樣,程序調用QuickRep1.Preview或者QuickRep1.Print便能預覽或者打印到一個關於Name的從左至右、從上到下的多欄報表。

發佈了7 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章