胡佩敏 在很多有關(guān)Delphi的書籍中,都沒有講解如何實(shí)現(xiàn)一個(gè)打印項(xiàng)的多欄打印,而現(xiàn)實(shí)生活中往往有許多報(bào)表要求同一項(xiàng)目多欄打印。QuickReport提供了報(bào)表打印一整套完整的解決方案,完全可以實(shí)現(xiàn)同一項(xiàng)目的多欄打印。
如果在Treport的DataSet屬性中選定一個(gè)Table,那么QuickReport每次打印詳細(xì)列表(BandType=rbDetail)屬性的TQRBand時(shí),系統(tǒng)會(huì)自動(dòng)取出一個(gè)記錄供打印,并將表中的記錄指針移到下一位,這樣程序無法控制表中記錄指針的移動(dòng),就無法實(shí)現(xiàn)多欄打印。因此,只要程序不在Treport的DataSet屬性選定任何表, QuickReport便不會(huì)控制表記錄的提取。
QuickReport特為其它類型數(shù)據(jù)打印提供了一個(gè)OnNeedData事件,QuickReport每次打印詳細(xì)列表屬性的TQRBand時(shí),會(huì)觸發(fā)這個(gè)事件,要求提供打印數(shù)據(jù),如果程序在OnNeedData事件中編寫運(yùn)用表中數(shù)據(jù)提供打印資料,便能實(shí)現(xiàn)多欄打印。現(xiàn)例舉實(shí)現(xiàn)一個(gè)Table1中Name項(xiàng)兩欄打印的方法。
1.在窗口上放TquickReport組件
quickReport1,并在上面放Tband組件band1,將其BandType屬性改為Detail。然后在Tband組件上并排放兩個(gè)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. 為了保證打印或者打印預(yù)覽開始時(shí)Table1指針在第一條記錄,在quickReport1的BeforePrint事件中寫如下代碼:
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
Table1.First;
end;
這樣,程序調(diào)用QuickRep1.Preview或者QuickRep1.Print便能預(yù)覽或者打印到一個(gè)關(guān)于Name的從左至右、從上到下的多欄報(bào)表。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!