?? 報表的制作.txt
字號:
標 題: Delphi 3中報表的制作
發信站: BBS 水木清華站 (Wed Sep 30 21:02:22 1998)
[轉載]
Borland Delphi是當今優秀的Windows可視化開發工具之一,今年
5月份推出的Delphi3是一個真正的32位開發平臺,比Delphi 2增加了
不少定制控件。Delphi 3沒有捆綁ReportSmih 報表制作工具,但同時
增加了QReport組中報表制作控件的功能,使制作報表更加方便靈活。
在Delphi 3中除了可以采用QReport組中報表制作控件來制作報表外,
還可利用打印機畫布直接向打印機輸出報表。下面將詳細介紹這兩種
方法。
用打印機畫布制作報表
Delphi引進了畫布的概念,使向打印機輸出和向屏幕的輸出具有
相同的方法,直接向打印機的畫布輸出線條和字符串,即可制作出任意
規格的報表。
首先,把支持打印機的Printers單元手工加到uses域里,然后在打
印事件中調用Tprintr 對象來制作報表。下面我們來看一個實際例子
。假設在當前Form1上有一按鈕名為Print-ep ;在Dialogs控件組選取
一PrintDialog控件加到Form1中,命名為printdg1;在Additional控件
組中選取一StringGrid控件加到Form1中,命名為temsgrid1,設其網格
為10行10列,并假設已完成了在temsgrid1控件中顯示一10行10列的數
據庫表數據的準備工作,然后在Print—rpCl ick事件中打印報表。程
序示例如下:
procedure TForm1.Print-repClick(Sender:TObject);
var i,j,cp,ph,pw,w,h:integer;
beginif printdg1.Execute then //打開打印對話框
begin
for cp:=1 to printdg1.copies do //打印份數
begin
with printer do
begin orientation:=poPortrait; //設置縱向打印方式
title:=‘打印報表例子’;//打印任務標題
pw:=pagewidth;//獲得當前設置的打印紙頁寬
ph:=pageheight; //獲得當前設置的打印紙頁高
h:=2104;
w:=1488;
begindoc;//開始打印
//下面畫表格,先畫11條橫線
for i:=1 to 11 do
begin
canvas.moveto(100*pw div w,i*100*ph div h);
canvas.lineto(1100*pw div w,i*100*ph div h);
end;
//再畫11條豎線
//再畫11條豎線
for i:=1 to 11 do
begin
canvas.moveto(i*100*pw div w,100*phdiv h);
canvas.lineto(i*100*pw div w,1100*ph div h);
end;
//填上數據
for j:=1 to 10 do
for i:=1 to 10 do
canvas.textout((100*i+10)*pwdiv w,(100*j+10)*ph div
h,temsgrid1.cells[- 1,j-1]);
enddoc;//結束打印end;
end;
end;
end;
在上面程序中,先打開打印對話框,然后再設置打印方向、打印標
題并獲取當前打印紙的寬高點數。在程序中,為了使在不同打印分辨
率中有相同的打印外觀,我們以180×180分辨率的 A4紙點數2104×14
88做為基準換算打印坐標。Printer.Canvas.Moveto(x,y)用于移動打
印機畫布坐標到(x,y)處;Printer.Canvas.Lineto(x,y)用于從畫布當
前坐標處畫一直線至x ,y);Printer.Canvas.Textout(x,y,Text)用于
在畫布的坐標(x,y)處以當前字體輸出字符串Text。為了使報表更加
美觀和生動,可以設置打印機畫布的字體、大小,還可以插入圖片等。
用QReport組控件制作報表
QuickReport是Quick Soft Development公司專為Delphi設計的
用于制作報表的工具。Delphi 3中QReport組控件十分豐富,只要很好
地利用這些控件就能制作出效果不錯的報表來。
1.建立一個報表
(1)首先我們在Form2上放置一TQuickRep控件,TQuickRep控件是
建立一報表必不可少的控件。可以改變該控件的屬性設置,以使其外
觀符合要求。在缺省情況下,TQuickRep控件的尺寸為放置在窗口上的
尺寸,TQuickRep控件根據當前控件的尺寸來自動設置數據區的范圍。
改變TQuickRep控件外觀最簡單的方法是:在TQuickRep控件內單
擊鼠標右鍵,在彈出菜單中選擇Report Settings項來打開設置窗口。
(2)設置數據。把TQRBand控件放到TQuickRep控件上,并把BandTy
pe屬性設為rbTitle,缺省情況下Align屬性是a1Top。然后把TQRLabel
控件放到TQRBand控件上,修改它的Caption屬性,作為報表的標題。
(3)把數據放到報表上。首先再將一個TQRBand控件放到TQuickRe
p控件上,并把BandTye 屬性設為rbDetail,然后把一個TTable控件(名
為Table1)放到From2上,設置它的DataBaseam e屬性和TableName屬性
,并把TTable控件的Active屬性設為True。與Delphi2不同的是,Dlph
i3中TQuickRep控件沒有DataSource屬性而以DataSet屬性來代替,因
此設置TQuickRep控件的DataSet屬性值為Table1。
(4)把一個TQRDBText控件放到第二個TQRBand控件上,設置它的Da
(4)把一個TQRDBText控件放到第二個TQRBand控件上,設置它的Da
taSet屬性值為Table, 設置DataField屬性為要顯示的字段。
到此,就可在TQuickRep內單擊鼠標右鍵,在彈出菜單中選擇Revie
w項來預覽報表。
2.預覽及打印報表
在運行期間也可以調用TQuickRep的Preview方法來預覽報表,在
預覽窗口中可單擊打印按鈕來打印報表,但也可直接調用TQuickRep的
Print方法來打印報表。
3.給報表的數據畫上網格
在省缺情況下,報表的數據周圍是沒有網格的。我們可以給數據
周圍加上網格,使其看起來更像一個表格,方法是設置TQRBand控件的
高度與TQRDBText高度控件相同,將所有的TQRDT ext控件的AutoSize
屬性設為False,并將它們首尾相連,然后將每一個TQRDBText控件的Fr
me 的子屬性DrawBottom、DrawLeft、DrawRight、DrawTop設為True,
子屬性Style設為poSoid。這樣即可加上網格線。
QReport控件組共有16種報表制作工作,以上只是一個粗略的介紹
,不能盡述其強大的功能。在具體應用中,用戶可以通過加載其它報表
制作控件設計出有個性的報表來。
兩種方法的比較
以上兩種制作報表的方法各有千秋。用QReport組控件來制作報
表的方法比較簡單,但是當報表較多時,用此方法顯得較笨拙,并且使
編譯后的可執行文件急劇增大。用打印機畫布制作報表的方法比較繁
重,必須根據實際的報表來設計每一條線的起止坐標,算好每個坐標點
的值,但當報表較多時,用此方法顯得較靈活,并且使編譯后的可執行
文件的代碼量增加不多,因此在這種情況下建議選用此方法。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -