用QuickReport完成Delphi多欄打印
發(fā)表時間:2024-02-24 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]胡佩敏 在很多有關(guān)Delphi的書籍中,都沒有講解如何實現(xiàn)一個打印項的多欄打印,而現(xiàn)實生活中往往有許多報表要求同一項目多欄打印。QuickReport提供了報表打印一整套完整的解決方案,完全可以實現(xiàn)同一項目的多欄打印。 如果在Treport的DataSet屬性中選定一個Table,那么Qu...
胡佩敏
在很多有關(guān)Delphi的書籍中,都沒有講解如何實現(xiàn)一個打印項的多欄打印,而現(xiàn)實生活中往往有許多報表要求同一項目多欄打印。QuickReport提供了報表打印一整套完整的解決方案,完全可以實現(xiàn)同一項目的多欄打印。
如果在Treport的DataSet屬性中選定一個Table,那么QuickReport每次打印詳細列表(BandType=rbDetail)屬性的TQRBand時,系統(tǒng)會自動取出一個記錄供打印,并將表中的記錄指針移到下一位,這樣程序無法控制表中記錄指針的移動,就無法實現(xiàn)多欄打印。因此,只要程序不在Treport的DataSet屬性選定任何表, QuickReport便不會控制表記錄的提取。
QuickReport特為其它類型數(shù)據(jù)打印提供了一個OnNeedData事件,QuickReport每次打印詳細列表屬性的TQRBand時,會觸發(fā)這個事件,要求提供打印數(shù)據(jù),如果程序在OnNeedData事件中編寫運用表中數(shù)據(jù)提供打印資料,便能實現(xiàn)多欄打印,F(xiàn)例舉實現(xiàn)一個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;
這樣,程序調(diào)用QuickRep1.Preview或者QuickRep1.Print便能預覽或者打印到一個關(guān)于Name的從左至右、從上到下的多欄報表。