明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

QuickReport基本知識(shí)

[摘要]一、 簡(jiǎn)單了解各控件功能   以下是各控件最簡(jiǎn)單的使用功能,其他功能依具體的實(shí)現(xiàn)而介紹。  TquickRep:帶有坐標(biāo),作為其他報(bào)表控件(如TQRBand)的容器,它的Band屬性可以自動(dòng)添加各種...
一、 簡(jiǎn)單了解各控件功能

  以下是各控件最簡(jiǎn)單的使用功能,其他功能依具體的實(shí)現(xiàn)而介紹。

  TquickRep:帶有坐標(biāo),作為其他報(bào)表控件(如TQRBand)的容器,它的Band屬性可以自動(dòng)添加各種類型的TQRBand.

  TQRLabel:打印靜態(tài)的文本(即不是根據(jù)數(shù)據(jù)庫(kù)值來(lái)改變的),作用象Tlabel , Caption的內(nèi)容就打印出來(lái)的內(nèi)容。

  TQRDBText:打印數(shù)據(jù)庫(kù)字段值,一個(gè)值一行。作用象TDBText.把它的DataSet , DataField分別賦予Table1,Company時(shí),將打印Table1所指向的表的Company字段的內(nèi)容。

  TQRSysData:打印系統(tǒng)信息如時(shí)間,頁(yè)碼,報(bào)表頭等。

  TQRMemo:非常象TQRLabel,只是它可以打印多行,也是打印靜態(tài)數(shù)據(jù)。

  TQRRichText:打印RichText格式,能夠連接到一個(gè)Form上的RichEdit控件并打印它的內(nèi)容,不過必須是32位版本的。

  TQRShape:打印方框、圓和垂直、水平線。

  TQRImage:打印靜態(tài)的圖片,包括(BMP,WMF,ICON).

  TQRDBImage:從數(shù)據(jù)庫(kù)接收?qǐng)D片。

  TQRBand:用來(lái)確定報(bào)表的不同位置應(yīng)該顯示什么內(nèi)容,它上面可以放控件(參見二)。

  TQRGoups:Groups可以不限級(jí)別的組操作。當(dāng)你連接了幾個(gè)datasets到報(bào)表時(shí)可以通過Groups成組的對(duì)dataset進(jìn)行操作。

  二、 報(bào)表的控件擺放循序

  出現(xiàn)在所有頁(yè)上的標(biāo)題(PageHeader)

  標(biāo)題(只有首頁(yè)才有)(Title)

  所有列的標(biāo)題(ColumnHeader)

  記錄的內(nèi)容,一個(gè)字段一列(Detail)

  摘要(最后一頁(yè)才有)(Summary)

  出現(xiàn)在所有頁(yè)上的頁(yè)腳(PageFooter)

  這些根據(jù)設(shè)置不同的Band(不是控件,一種類型而已,在其上面可以放其他控件)來(lái)定位?偣灿辛NBand。

  三、 一個(gè)簡(jiǎn)單的例子

  這個(gè)例子制作打印一張表的部分字段名及該字段數(shù)據(jù)內(nèi)容的報(bào)表。

  建立一個(gè)新project

  放一個(gè)TTable到Form上,DatabaseName設(shè)為BCDEMOS,TableName指向Customer表,Active設(shè)為true.

  放一個(gè)TquickRep控件在Form上,DataSet屬性為Table1.(即要顯示上邊Table1所指向的表的內(nèi))。

  展開TquickRep的Bands屬性,設(shè)HasDetail為true,這時(shí)自動(dòng)增加個(gè)detail band(一個(gè)TQRBand控件,故也可以直接放一個(gè)TQRBand控件,BandType屬性設(shè)為detail就行了)。

  放一個(gè)TQRDBText控件在detail band上面,設(shè)DataSet指向Table1,DataField指向Company。第四步是設(shè)置在報(bào)表的什么位置顯示什么類型的數(shù)據(jù),而TQRDBText則具體實(shí)現(xiàn)。

  選TquickRep控件,按右鍵,選擇”Preview”預(yù)覽,應(yīng)該看到表Customer的字段Company的所有字段值。

  到這一個(gè)簡(jiǎn)單的例子就OK了,程序?qū)崿F(xiàn)預(yù)覽及利用TQRuickRep自帶的打印功能只須在Form中加一個(gè)按鈕,它的OnClick事件為:QuickRep1->Preview();

  四、一個(gè)使用TQRGoups、TQRExpr控件的報(bào)表

  該報(bào)表先列出州名,接著列出該州的所有公司及公司總數(shù),一個(gè)州列完后空一行(groups中斷),列出新的州名,接著列新州下的所有公司,沒有填州名的公司統(tǒng)一列在Unknown state下面。

  建立一個(gè)新project。

  放一個(gè)Tquery在Tquickrep上,其SQL屬性為:select * from customer order by State,Company;(即根據(jù)州、公司排序),DatabaseName為BCDMome,Active為true.

  放一個(gè)TquickRep控件在Form1上,DataSet為Tquery1.

  放一個(gè)TQRGroups控件在TquickRep上,這時(shí)默認(rèn)為group header。(任何時(shí)候當(dāng)group中斷或更高級(jí)別的group中斷,這個(gè)header都將打印出來(lái),如果有表達(dá)式,根據(jù)表達(dá)式的值顯示內(nèi)容。)接著添加一個(gè)group footer band,添加時(shí),放一個(gè)TQRBand控件在報(bào)表上,連接TQRGroups的FooterBand屬性到這個(gè)QRBand,這時(shí)這個(gè)新建的TQRBand就成為Group Footer. (TQRGroup的一個(gè)重要特性是表達(dá)式,任何時(shí)候當(dāng)表達(dá)式的值變時(shí)Group都將中斷,如表達(dá)式是按省列出城市名,當(dāng)前列出廣東省,當(dāng)屬于該省的城市列完后,表達(dá)式值改變,這時(shí)Group中斷,接著顯示其他省的城市名。)TQRGroups的Expression屬性設(shè)為Query1.State(根據(jù)不同的州來(lái)中斷)。

  放一個(gè)TQRBand控件在報(bào)表上,BandType為rbDetail.

  放一個(gè)TQRExpr控件在group header上面,其Expression屬性為:if(State<>’’,State,’Unknown state’),即如果公司的州沒填,就歸入U(xiǎn)nknown state,否則歸入State.

  放三個(gè)TQRDBText在Detail上,他們的DataSet都指向Query1,DataField分別指向Company,Contact,Phone.

  在放一個(gè)TQRExpr控件在group Footer上面,Expression為’Customers in’+State+’:’+Str(Count) 作用是在每個(gè)州的公司列完后顯示該州總共有多少個(gè)公司。

  按右鍵選預(yù)覽,應(yīng)該看到不同的州名及其公司和公司公司總數(shù)。

  五、QuickReport 條件式列印

  可以直接在 TQuickReport 的 OnFilter 事件中寫明條件判斷,OnFilter事件的引數(shù)中有一個(gè)以 var 宣告的 PrintRecord 布林型態(tài)變數(shù),將這個(gè)變數(shù)設(shè)為 True(預(yù)設(shè)值), 該筆記錄便會(huì)印出;反之, 設(shè)為False,就不印出這筆記錄.


procedure TForm1.QuickReport1Filter(var PrintRecord: Boolean);
begin
PrintRecord := False;
if YourTable.FieldByName('WantedField').AsInteger <= 100 then
Exit;
if YourTable.FieldByName('WantedField').AsInteger >= 150 then
Exit;
PrintRecord := True;