版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、使用TfrxReport 組件工作1、加載并存儲報表默認(rèn)情況下,報表窗體同項目窗體構(gòu)存儲在同一個DFM文件中。多數(shù)情況下,無須再操作,因而你就不必采用特殊方法加載報表。如果你決定在文件中存儲報表窗體或者是數(shù)據(jù)庫的Blob字段(他提供了非常大的彈性,你能夠在非編譯程序中修改),你必須使用“TfrxReport”提供的加載和存儲方法。function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean;從一個給定名字文件中加載報表。如果第二個參數(shù)等于“True”并且文件沒找到,那
2、么他會觸發(fā)一個異常。如果文件加載成功,他返回“True”。procedure LoadFromStream(Stream: TStream);從流中加載報表。procedure SaveToFile(const FileName: String);用特殊名稱文件存儲報表。procedure SaveToStream(Stream: TStream);把報表存在流中。例如:Pascal:frxReport1.LoadFromFile(c:1.fr3);frxReport1.SaveToFile(c:2.fr3);C+:frxReport1-LoadFromFile(c:1.fr3);frxRep
3、ort1-SaveToFile(c:2.fr3);2.設(shè)計報表通過“TfrxReport.DesignReport”方法調(diào)用報表設(shè)計器。你必須在你的項目中包含報表設(shè)計器(必要條件是:要么使用“TfrxDesigner”組件,要么增加“frxDesgn”單元到uses列表)“DesigReport”方法接受兩個默認(rèn)參數(shù):procedure DesignReport(Modal: Boolean = True; MDIChild: Boolean = False);Modal參數(shù)決定設(shè)計器是否被模態(tài),MDIChild參數(shù)允許把設(shè)計器窗體作為一個MDI子窗體。例如:frxReport1.Design
4、Report;3.運行報表應(yīng)用下面兩個“TfrxReport”方法中的一個啟動報表:procedure ShowReport(ClearLastReport: Boolean = True);啟動報表并在預(yù)覽窗體中顯示。如果“ClearLastReport”參數(shù)等于“False”,報表將會增加先前的一個報表結(jié)果,否則清除前一個報表結(jié)構(gòu)。function PrepareReport(ClearLastReport: Boolean = True): Boolean;啟動報表,沒有打開預(yù)覽窗體,參數(shù)賦值與“ShowReport”方法同名。如果報表構(gòu)造成功,他返回“True”。多數(shù)情況下,使用第一種
5、方法更為方便一些。在報表被構(gòu)造的同時,他會立刻顯示一個預(yù)覽窗體。當(dāng)需要增加另一個報表到前一個報表中的時候,“ClearLastReport”參數(shù)顯得方便些。(此類技術(shù)用于批量報表打?。@纾篺rxReport1.ShowReport; 4.預(yù)覽報表使用兩種途徑顯示一個報表是可能的:兩者都是調(diào)用“TfrxReport.ShowReport”方法(先前描述過了),或者使用“TfrxReport.ShowPreparedReport”方法來幫助實現(xiàn)。在第二種情況下,報表構(gòu)造沒有被執(zhí)行,但顯示了一個完成的報表。也就是說,你要么在“PreparedReport”方法幫助下構(gòu)造他,要么在構(gòu)造前從文件中加
6、載報表(查看“加載存儲完成的報表”)例如:Pascal:if frxReport1.PrepareReport then frxReport1.ShowPreparedReport;C+:if(frxReport1-PrepareReport(true) frxReport1-ShowPreparedReport(); 在這種情況下,報表構(gòu)造器先被完成了,并顯示在預(yù)覽窗體中。構(gòu)造一個龐大的報表可能要花費很多時間,那就是為什么使用“ShowReport”非等時同步方法會好于“PrepareReport/ShowPreparedReport”方法。你可以通過“TfrxReport.PreviewO
7、ptions”屬的缺省值設(shè)定預(yù)覽參數(shù)值。(這句翻譯的不夠好,請參考原文)原文參考:In this case, report construction is finished first, and after that it is displayed in the preview window. Construction of a large report can take a lot of time, and that is why it is better to use the “ShowReport anisochronous” method, than the “PrepareRepor
8、t/ShowPreparedReport” one. One can assign preview settings by default via the “TfrxReport.PreviewOptions” property.5、打印報表大多數(shù)情況下,你可以從預(yù)覽窗體打印報表。要人工打印報表,你應(yīng)該使用“TfrxReport.Print”方法,例如:frxReport1.LoadFromFile(.);frxReport1.PrepareReport;frxReport1.Print;同時,你可以在顯示的打印對話框中設(shè)置打印參數(shù),你也可以使用默認(rèn)設(shè)定值。取消打印對話框,請參考“TfrxRe
9、port.PrintOptions”屬性幫助6.載入并存儲報表這個功能可以在預(yù)覽窗口中執(zhí)行。也可以使用手工方法執(zhí)行,幫助參考“TfrxReport.PreviewPages”方法: function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean; procedure SaveToFile(const FileName: String); procedure LoadFromStream(Stream: TStream); procedure SaveToStream(Str
10、eam: TStream);賦值和參數(shù)化類似與TfrxReport相應(yīng)的方法。文件包含了完成的報表,默認(rèn)情況下以“FP3”為擴展名。例如:Pascal:frxReport1.PreviewPages.LoadFromFile(c:1.fp3);frxReport1.ShowPreparedReport;C+:frxReport1-PreviewPages-LoadFromFile(c:1.fp3);frxReport1-ShowPreparedReport();注意,完成的報表加載完畢后,預(yù)覽方法是通過“ShowPreparedReport” 方法執(zhí)行的。7.導(dǎo)出報表他可以從預(yù)覽窗口中執(zhí)行。也
11、可以手動操作,通過“FfrxReport.Export”方法,及這個方法中的參數(shù),你可以導(dǎo)出你想要導(dǎo)出的文件類型:frxReport1.Export(frxHTMLExport1);導(dǎo)出過濾組件必須是有效的(你必須把他們放到你項目中的窗體上)并調(diào)整正確。The export filter component must be available (you must put it on the form of your project) and be adjusted correctly.8.創(chuàng)建自定義預(yù)覽窗體FastReport在標(biāo)準(zhǔn)的預(yù)覽窗口中顯示報表。如果因為某些原因而不適合你,你可以創(chuàng)建一
12、個自定義預(yù)覽窗體。為了這個目的,需要設(shè)計FastReport組件面板中的“TfrxReport”組件。要顯示報表,TfrxReport.Preview方法應(yīng)該連接到這個組件。在使用TfrxPreview組件的時候,有兩個典型的問題。他不會處理按鍵(箭頭,PgUp,PgDown等等)和鼠標(biāo)滾輪(如果有的話)。要讓TfrxPreview同按鍵工作,設(shè)置焦點給他(他是可以做到的,例如,在窗體的OnShow事件句柄中)frxPreview.SetFocus;要讓TfrxPreview同鼠標(biāo)滾輪工作,你必須創(chuàng)建OnMouseWheel事件句柄,并且調(diào)用TfrxPreview.MouseWheelScro
13、ll方法。procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);begin frxPreview1.MouseWheelScroll(WheelDelta);end;9.建立復(fù)合報表(批量打?。?在某些情況下,需要立刻組織幾個報表打印,或者在一個打印預(yù)覽窗體中封裝并呈現(xiàn)幾個報表。要執(zhí)行這些,在FastReport中有些工具能夠允許建立一個新的報表附加在一個已經(jīng)存在的報表上?!癟frxRepo
14、rt.PrepareReport”方法中有一個選項“ClearLasReport”布爾類型參數(shù),默認(rèn)情況下他等于True,這個參數(shù)定義了是否有必要在建立報表時清除前一個報表。下面的方法展示了如何從兩個報表中建立一個批量報表:Pascal:frxReport1.LoadFromFile(1.fr3);frxReport1.PrepareReport;frxReport1.LoadFromFile(2.fr3);frxReport1.PrepareReport(False);frxReport1.ShowPreparedReport;C+:frxReport1-LoadFromFile(1.fr3
15、);frxReport1-PrepareReport(true);frxReport1-LoadFromFile(2.fr3);frxReport1-PrepareReport(false);frxReport1-ShowPreparedReport(); 我們加載并建立第一個報表,但并沒有顯示他。然后我們加載第二個報表到同一個TfrxReport對象,并使用“ClearLastReport”參數(shù),讓他等于False。這就允許第二個報表附加在先前建立的報表之后。接下來,我們在預(yù)覽窗口中顯示一個完成的報表。9.1 復(fù)合報表中的頁數(shù) 你可以使用“Page”,“Page#”,“TotalPages”
16、和“TotalPages#”系統(tǒng)變量顯示頁數(shù)或總頁數(shù),在復(fù)合報表中,這些變量以下面的方式工作: 當(dāng)前報表頁數(shù)Page# - 批量報表頁數(shù)TotalPages - 當(dāng)前報表總頁數(shù)(報表必須兩遍)Totalpages# - 批量報表總頁數(shù)9.2 合并符合報表頁數(shù) 正如上面所說的,報表設(shè)計頁中的“PrintOnPrevousPage”方法讓你在打印報表的時候使用前一頁的剩余空間接合報表。在復(fù)合報表中,允許你在前一個報表的最后一頁的剩余空間創(chuàng)建一個新的報表。要執(zhí)行這個,要使能每一個連續(xù)報表的第一個設(shè)計頁“PrintOnPreviousePage”屬性 10.交互報表 在交互報表中,你可以在預(yù)覽窗口定義
17、任意報表對象的鼠標(biāo)單擊反應(yīng)。例如,一個用戶能夠單擊數(shù)據(jù)線,結(jié)果運行一個帶有選擇線的明細數(shù)據(jù)。 任何報表都能交互。要執(zhí)行他,你僅僅需要創(chuàng)建TfrxReport.OnClickObject事件句柄。下面代碼是這個事件句柄的示例:Pascal:procedure TForm1.frxReport1ClickObject(Page: TfrxPage; View: TfrxView; Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);begin if View.Name = Memo1 then ShowMessage(M
18、emo1 contents: + #13#10 + TfrxMemoView(View).Text); if View.Name = Memo2 then begin TfrxMemoView(View).Text := InputBox(Edit, Edit Memo2 text:, TfrxMemoView(View).Text); Modified := True; end;end;C+:void _fastcall TForm1:frxReport1ClickObject(TfrxView *Sender, TMouseButton Button, TShiftState Shift,
19、 bool &Modified) TfrxMemoView * Memo; if(Memo = dynamic_cast (Sender) if(Memo-Name = Memo1) ShowMessage(Memo1 contents:nr + Memo-Text); if(Memo-Name = Memo2) Memo-Text = InputBox(Edit, Edit Memo2 text:, Memo-Text); Modified = true; 在對象的單擊事件句柄上,你可以做如下事情:- 修改一個對象或頁的內(nèi)容,傳遞句柄(結(jié)果,被修改的將被特殊標(biāo)記,因此修改的內(nèi)容應(yīng)該引起重視)
20、;- 由于使用重構(gòu)或重新建立報表,調(diào)用TfrxReport.PrepareReport方法在此例中,點擊名字為memo1對象的結(jié)果顯示這個對象內(nèi)容的消息。當(dāng)點擊memo2是顯示一個對話框,這個對象的內(nèi)容可能被修改。設(shè)置Modified標(biāo)志為True,允許保持和顯示變更。 同樣的方法,單擊事件可以被定義成不同的響應(yīng)。例如,運行一個新報表。如下注釋是必要的。在FastReport3版本中,一個報表組件可以在一個預(yù)覽窗口中顯示唯一的報表(不像FastReport2.x版本)。那就是為什么一個報表預(yù)覽窗也會在分開的對象中運行一個報表,或者是同一個對象,但當(dāng)前報表必須被抹除。 關(guān)于給終端用戶一個可單擊對
21、象提示定位,在預(yù)覽窗口中,鼠標(biāo)經(jīng)過一個可單擊對象的時候,我們可以修改鼠標(biāo)的光標(biāo)。要做到這些,在報表設(shè)計器上選擇一個要設(shè)計的對象并設(shè)置他的cursor屬性為不同于crDefault的某個值。更多的細節(jié)涉及到定義的單擊對象。在簡單報表中,可以依照對象的名字或他的內(nèi)容來定義。然而,這就不能更多的執(zhí)行可修改的事例。例如,一個明細報表應(yīng)當(dāng)在一個數(shù)據(jù)選擇行被創(chuàng)建。一個用戶單擊了內(nèi)容為12的memo1對象。數(shù)據(jù)行讓這個對象參考什么?那就是為什么你應(yīng)當(dāng)知道主鍵了,主鍵用于明確的標(biāo)識這一行。FastReport能夠賦值一個字串,包含任意數(shù)據(jù)(在我們的事例主鍵數(shù)據(jù)中),對于每個報表對象,這個字串存儲在TagStr
22、屬性中。 讓我們來通過一個報表的例子來舉例說明,這個報表包含在FastReportDemo.exe-Simple list示例中。這是一個公司的客戶列表,包含諸如客戶名稱,地址,聯(lián)系人等數(shù)據(jù)。數(shù)據(jù)源是來自DBDEMOS演示數(shù)據(jù)庫的Customer.db表。這個表有一個主鍵,CustNO字段,他沒有出現(xiàn)在報表中。我們的任務(wù)是終止他通過參考單擊完成報表上的任意對象記錄他,這就意味著要獲取主鍵的值,要執(zhí)行此項操作,就要為所有對象的TagStr屬性加入值,依賴于主數(shù)據(jù)欄:Customers.CustNo 在報表建立期間,使用相同的方法計算TagStr屬性內(nèi)容,同時計算文本對象的內(nèi)容;這就意味著變量值會
23、替代所有變量的位置。變量細節(jié)使用方括號括起來。那就是為什么行值是1005, 2112等類似值了。在報表建立后,包含TagStr屬性對象的類型取決與主數(shù)據(jù)欄。一個簡單的從字串到整形的轉(zhuǎn)換就會提供給我們一個主鍵的值,這也是所需記錄能夠找到的主鍵。 如果主鍵是復(fù)合的(包含多個字段),TagStr屬性的內(nèi)容可能是如下值:Table1.Field1;Table1.Field2在構(gòu)造一個報表完成后,TagStr屬性包含“1000;1”類型值, 此值不同比相同要好。11.從代碼中存取報表對象報表對象(例如:report page, band, memo-object)是不能在你的代碼中直接存取的。這就意味著
24、你不能通過名字尋址對象。例如,當(dāng)你在你的窗體上尋址一個按鈕。要尋址一個對象,在TfrxReport.FindObject方法中找到幫助:Pascal:var Memo1: TfrxMemoView;Memo1 := frxReport1.FindObject(Memo1) as TfrxMemoView;C+:TfrxMemoView * Memo = dynamic_cast (frxReport1-FindObject(Memo1);然后,你就能夠?qū)ぶ穼ο蟮膶傩院头椒?。你也使用“TfrxReport.Pages”屬性尋址報表頁。Pascal:var Page1: TfrxReportPag
25、e;Page1 := frxReport1.Pages1 as TfrxReportPage;C+:TfrxReportPage * Page1 = dynamic_cast (frxReport1-Pages1);12.從代碼中創(chuàng)建報表作為一項規(guī)則,你將在設(shè)計器中創(chuàng)建多數(shù)報表。然而,在某些情況下(例如,當(dāng)報表窗體未知的時候),使用代碼手工創(chuàng)建一個報表是是十分必要的。想要手工創(chuàng)建一個報表,你需要執(zhí)行下面的順序步驟:- 清除報表組件- 添加數(shù)據(jù)源- 添加數(shù)據(jù)頁- 添加報表頁- 添加欄頁- 設(shè)置欄屬性,接著把他們同數(shù)據(jù)相連- 在每個欄上加入對象- 設(shè)置對象屬性,接著把他們同數(shù)據(jù)相連讓我們來檢查一下
26、創(chuàng)建一個簡單報表的類型列表。假設(shè)我們擁有如下組件:frxReport1: TfrxReport and frxDBDataSet1: TfrxDBDataSet(最后一個連接到DBDEMOS數(shù)據(jù),Customer.db表)。我們的報表將包含一個帶有報表標(biāo)題和主數(shù)據(jù)欄的頁。在報表標(biāo)題欄上有一個帶有“Hellow FastReport”文本的對象,主數(shù)據(jù)欄包含一個帶有連接到“CustNo”字段的對象。Pascal:var DataPage: TfrxDataPage; Page: TfrxReportPage; Band: TfrxBand; DataBand: TfrxMasterData; M
27、emo: TfrxMemoView; 清除報表 frxReport1.Clear; 為報表添加數(shù)據(jù)集到可存取的列表中 frxReport1.DataSets.Add(frxDBDataSet1); 添加Data頁 DataPage := TfrxDataPage.Create(frxReport1); 添加頁 Page := TfrxReportPage.Create(frxReport1); 創(chuàng)建唯一名稱 Page.CreateUniqueName; 設(shè)置默認(rèn)字段大小, 紙張和打印方向 Page.SetDefaults; 修改紙張方向 Page.Orientation := poLandsc
28、ape; 添加一個報表標(biāo)題欄 Band := TfrxReportTitle.Create(Page);Band.CreateUniqueName; it is sufficient to set the ?Top? coordinate and height for a band both coordinates are in pixels Band.Top := 0;Band.Height := 20; 為標(biāo)題欄添加一個對象 Memo := TfrxMemoView.Create(Band);Memo.CreateUniqueName;Memo.Text := Hello FastRepo
29、rt!;Memo.Height := 20; 這個對象將伸展坐標(biāo)到欄的寬度 Memo.Align := baWidth; 添加主數(shù)據(jù)欄 DataBand := TfrxMasterData.Create(Page);DataBand.CreateUniqueName;DataBand.DataSet := frxDBDataSet1; 頂端的調(diào)整應(yīng)當(dāng)比先前加入欄的頂部+高度大一些 DataBand.Top := 100;DataBand.Height := 20; 在主數(shù)據(jù)欄上添加一個對象 Memo := TfrxMemoView.Create(DataBand);Memo.CreateUni
30、queName; 連接數(shù)據(jù) Memo.DataSet := frxDBDataSet1;Memo.DataField := CustNo;Memo.SetBounds(0, 0, 100, 20); 調(diào)整文本到右側(cè)的對象邊緣 Memo.HAlign := haRight; 顯示報表 frxReport1.ShowReport;C+:TfrxDataPage * DataPage;TfrxReportPage * Page;TfrxBand * Band;TfrxMasterData * DataBand;TfrxMemoView * Memo;/ 清除報表 frxReport1-Clear()
31、;/ 在報表上添加一個數(shù)據(jù)集到數(shù)據(jù)集存取列表frxReport1-DataSets-Add(frxDBDataset1);/ 添加“數(shù)據(jù)”頁DataPage = new TfrxDataPage(frxReport1);/ 添加一頁Page = new TfrxReportPage(frxReport1);/ 創(chuàng)建一個不重復(fù)的名稱CreateUniqueName();/ 設(shè)置域大小, 紙張和默認(rèn)的打印方向SetDefaults();/ 修改紙張的打印方向Orientation = poLandscape;/ 增加一個報表標(biāo)題欄Band = new TfrxReportTitle(Page);B
32、and-CreateUniqueName();/ 為欄充分設(shè)置頂部坐標(biāo)和高度/ 在像素上包含坐標(biāo)Band-Top = 0;Band-Height = 20;/ 在報表標(biāo)題欄加入一個對象Memo = new TfrxMemoView(Band);Memo-CreateUniqueName();Memo-Text = Hello FastReport!;Memo-Height = 20;/ 此對象將會被按照欄的寬度延展Memo-Align = baWidth;/ 添加主數(shù)據(jù)欄DataBand = new TfrxMasterData(Page);DataBand-CreateUniqueName(
33、);DataBand-DataSet = frxDBDataset1;/ 頂部坐標(biāo)應(yīng)該大于前邊添加欄的頂部坐標(biāo)+高度DataBand-Top = 100;DataBand-Height = 20;/ 主數(shù)據(jù)上加入一個對象Memo = new TfrxMemoView(DataBand);Memo-CreateUniqueName();/ 連接到數(shù)據(jù)Memo-DataSet = frxDBDataset1;Memo-DataField = CustNo;Memo-SetBounds(0, 0, 100, 20);/ 調(diào)整文本到右側(cè)對象的空白Memo-HAlign = haRight;/ 顯示報表
34、frxReport1-ShowReport(true);讓我們來解釋一些細節(jié): 所有在報表中使用的數(shù)據(jù)集都必須添加到數(shù)據(jù)源列表中,在我們示例中,是用frxReport1.DataSets.Add(frxDBDataSet1)這一行執(zhí)行的。否則,報表就不會工作。 數(shù)據(jù)頁對于插入內(nèi)部數(shù)據(jù)集是必要的,例如TfrxADOTable。這些數(shù)據(jù)集只能放在數(shù)據(jù)頁。 調(diào)用Page.SetDefaults不是必須的,因為在這個案例中頁A4紙張設(shè)置和頁邊距都是0毫米。默認(rèn)值設(shè)置10毫米頁邊距,并捕獲打印機頁大小和對齊方式。 在增加欄到頁面的同時,你要確認(rèn)他們沒有互相重疊在一起。要執(zhí)行他,頂部和高度的坐標(biāo)是相似的。
35、總是要在設(shè)計器中定位相同的位置的。 對象的坐標(biāo)和大小是以像素為單位的,因為所有對象的left, Top, Width和Height屬性都擁有擴展類型,你能夠指出非整形值。下面常量用于轉(zhuǎn)化像素到厘米和英寸:fr01cm = 3.77953;fr1cm = 37.7953;fr01in = 9.6;fr1in = 96;例如,一個欄的高度等于5毫米如下設(shè)定:Band.Height := fr01cm * 5; Band.Height := fr1cm * 0.5; 12.代碼中創(chuàng)建對話框 我們知道,報表可以包含對話框窗體。下面的例子展示了如何創(chuàng)建一個帶有OK按鈕的對話框窗體:Pascal: for
36、 working with dialogue objects the following unit should be used uses frxDCtrl;var Page: TfrxDialogPage; Button: TfrxButtonControl; 添加頁 Page := TfrxDialogPage.Create(frxReport1); 創(chuàng)建唯一名稱 Page.CreateUniqueName; 設(shè)置大小 Page.Width := 200;Page.Height := 200; 設(shè)定位置 Page.Position := poScreenCenter; 添加一個按鈕 But
37、ton := TfrxButtonControl.Create(Page);Button.CreateUniqueName;Button.Caption := OK;Button.ModalResult := mrOk;Button.SetBounds(60, 140, 75, 25); 顯示報表 frxReport1.ShowReport; C+:/使用對話框?qū)ο蠊ぷ鳎瑫玫较旅娴膯卧?include frxDCtrl.hppTfrxDialogPage * Page;TfrxButtonControl * Button;/添加一頁Page = new TfrxDialogPage(frxR
38、eport1);/創(chuàng)建唯一名稱CreateUniqueName();/設(shè)置大小Width = 200;Height = 200;/設(shè)定位置Position = poScreenCenter;/ 添加一個按鈕Button = new TfrxButtonControl(Page);Button-CreateUniqueName();Button-Caption = OK;Button-ModalResult = mrOk;Button-SetBounds(60, 140, 75, 25);/顯示報表 frxReport1-ShowReport(true);fast report 的使用說明1.
39、TfrxDBDataset TfrxUserDataset 數(shù)據(jù)存取元件。 FastReport 使用這些元件讀取及參考數(shù)據(jù)庫的字段,這兩個元件都源于 “TfrxDataSet” 并繼承其大部分的功能。 TfrxUserDataSet 元件允許構(gòu)建未連接到數(shù)據(jù)庫的報表,而由其它來源接收數(shù)(據(jù)如:數(shù)列、文件等)。在此同時,程序員僅需提供瀏覽此數(shù)據(jù)集的功能,資料接收并非由此元件執(zhí)行,而是用其它的方法(例如,經(jīng)由“TfrxReport.OnGetValue”事件)。 TfrxUserDataSet 元件有下列的屬性: (1) property RecNo: Integer readonly;目前記錄
40、編號,首筆的記錄編號是“0” (2) property Enabled: Boolean default True;定義此 元 件是否可在designer 里面使用。 (3) property RangeBegin: TfrxRangeBegin default rbFirst;數(shù)據(jù)導(dǎo)航(navigation)的起點。 下列的值可以使用: rbFirst 從數(shù)據(jù)的第一筆記錄開始。rbCurrent 從當(dāng)前的記錄開始 (4) property RangeEnd: TfrxRangeEnd default reLast;數(shù)據(jù)導(dǎo)航(navigation)的起點。 下列的值可以使用: reLast 直
41、到數(shù)據(jù)結(jié)束。ReCurrent 直到目前的記錄。reCount 依“RangeEndCount” 屬性而 定。 (5) property RangeEndCount: Integer;數(shù)據(jù)集中的數(shù)據(jù)個數(shù),此功能只在“RangeEnd”屬性等于reCount 有效。 (6) property UserName: String;符號名稱。在報表設(shè)計環(huán)境(Designer)下,將被顯示于DataSet 的下方。 (7) property OnCheckEOF: TfrxCheckEOFEvent; TfrxCheckEOFEvent = procedure(Sender: TObject; var
42、Eof: Boolean)of object; 此事件在數(shù)據(jù)集的尾端時,Eof 參數(shù)將返回True。 (8) property OnFirst: TNotifyEvent;數(shù)據(jù)集移至第一筆的位置時,會觸發(fā)此事件。 (9) property OnNext: TNotifyEvent;數(shù)據(jù)集移至下一筆的位置時,會觸發(fā)此事件。 (10)property OnPrior: TNotifyEvent;數(shù)據(jù)集移至上一筆的位置時,會觸發(fā)此事件。2. TfrxDBDataSet 元件用來連接以TDataSet, TTable 及TQuery 為基類的數(shù)據(jù)庫元件,有關(guān)數(shù)據(jù)的導(dǎo)航及字段的參考都是自動的,程序員不需
43、特殊的設(shè)定。 除上述屬性外,該元件有下列的屬性: (1) property CloseDataSource: Boolean default False;報表創(chuàng)建完成后,關(guān)閉數(shù)據(jù)庫。 (2) property OpenDataSource: Boolean default True;在報表創(chuàng)建之前打開數(shù)據(jù)庫。 (3) property FieldAliases: TStrings;數(shù)據(jù)集字段的符號名稱(別名)。 (4) property DataSet: TDataSet; (5) property DataSource: TDataSource;連結(jié)至TDataSet 或TDataSourc
44、e 類型的元件。 (6) property OnClose: TNotifyEvent;當(dāng)關(guān)閉數(shù)據(jù)集時觸發(fā)此事件。 (7) property OnOpen: TNotifyEvent;當(dāng)打開數(shù)據(jù)集時觸發(fā)此事件 3. TfrxDesigner TfrxDesigner 元件是報表設(shè)計器,當(dāng)使用此元件,你的工程文件就可以使用報表設(shè)計器,此元件它只包含一些報表設(shè)計器的設(shè)定,當(dāng)加入”frxDesign” 單元到uses 清單中,就表明與報表設(shè)計器連接上了。 此元件包含下列的屬性: (1) property CloseQuery: Boolean default True;定義結(jié)束設(shè)計報表是否詢問儲存報
45、表之用。 (2) property OpenDir: String;打開報表的預(yù)置數(shù)據(jù)目錄 (3) property SaveDir: String;儲存報表的預(yù)置數(shù)據(jù)目錄。 (4) property Restrictions: TfrxDesignerRestrictions;報表設(shè)計環(huán)境下,限制不同的報表操作標(biāo)識(flag),此標(biāo)識包含單一或混合數(shù)據(jù)值: drDontInsertObject 禁止插入物件drDontDeletePage 禁止刪除頁面drDontCreatePage 禁止建立新的頁面 drDontChangePageOptions 禁止修改頁面屬性drDontCreateR
46、eport 禁止建立新報表 drDontLoadReport 禁止載入報表drDontSaveReport 禁止儲存報表 drDontPreviewReport 禁止預(yù)覽報表drDontEditVariables 禁止編輯變量 drDontChangeReportOptions 禁止修改報表屬性 (5) property OnLoadReport: TfrxLoadReportEvent; TfrxLoadReportEvent = function(Report: TfrxReport): Boolean of object; 此事件發(fā)生在載入報表之時。利用此事件,你可以從數(shù)據(jù)庫載入報表。
47、(6) property OnSaveReport: TfrxSaveReportEvent; TfrxSaveReportEvent = function(Report: TfrxReport;SaveAs:Boolean): Boolean of object; 此事件發(fā)生在儲存報表之時。利用此事件,你可以將報表儲存于數(shù)據(jù)庫中。 (7) property OnShow: TNotifyEvent;此事件發(fā)生在啟動報表設(shè)計環(huán)境時。 4. TfrxPreview 此元件專供建立自定義報表合預(yù)覽窗口使用。 (1) procedure AddPage;加入空白頁面到報表末端。 (2) proced
48、ure DeletePage;刪除當(dāng)前頁。 (3) procedure Print;打印報表。 (4) procedure LoadFromFile;顯示文件載入窗口。 (5) procedure LoadFromFile(FileName: String);載入指定的文件。 (6) procedure SaveToFile;顯示文件儲存窗口。 (7) procedure SaveToFile(FileName: String);儲存文件到指定的文件名稱 (8) procedure Edit;載入當(dāng)前頁至設(shè)計模式供編輯使用。 (9) procedure Export(Filter: TfrxC
49、ustomExportFilter);使用指定的導(dǎo)出過濾器導(dǎo)出報表。 (10) procedure First;第一頁。 (11) procedure Next;下一頁。 (12) procedure Prior;上一頁(13) procedure Last;最后一頁。 (14) procedure PageSetupDlg;顯示頁面設(shè)定窗口。 (15) procedure Find;顯示文字搜尋窗口。 (16) procedure FindNext;繼續(xù)找下一個。 (17) procedure Cancel;取消創(chuàng)建報表。 (18) procedure Clear;清除報表。 你可以使用下列
50、屬性: (1) property PageCount: Integer readonly;報表頁數(shù)。 (2) property PageNo: Integer;目前報表頁碼(起始值為1)。要移至其它頁面,指定此屬性的值即可。 (3) property Tool: TfrxPreviewTool;選取工具。 (4) property Zoom: Extended;顯示比例,“1” 代表100% 。 (5) property ZoomMode: TfrxZoomMode;顯示模式,可以的顯示模式如下:zmDefault 預(yù)置值,顯示比例根據(jù)“Zoom” 屬性而定zmWholePage 整頁模式zm
51、PageWidth 與頁面寬度相同 zmManyPages 一屏顯示多頁 (6) property OutlineVisible: Boolean;是否顯示報表大綱(樹狀結(jié)構(gòu))。 (7) property OnPageChanged: TfrxPageChangedEvent;目前頁面要改變時,此事件將被觸發(fā)。 5. TfrxBarcodeObject TfrxOLEObject TfrxChartObjectTfrxRichObject TfrxCrossObject TfrxCheckBoxObject TfrxGradientObject 可在報表內(nèi)部使用的物件,這些元件自己沒做任何事情
52、,它們會自動將元件的單元加入uses 清單,加入你打算打開一份報表,此功能會自動被加入報表,未包括此物件至工程文件的話,打開報表時將會發(fā)生錯誤。 TfrxDialogContols 附加項(add-in) 物件的集合,可用于報表內(nèi)的對話窗口,它包含下列元件:button,edit box, list box 等。此元件自己不會執(zhí)行任何事,加入此元件“frxDCtrl”將會自動加入“Uses”清單。 TfrxBDEComponents BDE 數(shù)據(jù)庫元件,數(shù)據(jù)庫界面采用BDE(Borland Database Engine)時,工程文件必須加入此元件。 TfrxADOComponents ADO
53、 數(shù)據(jù)庫元件,數(shù)據(jù)庫連接采用ADO(Advance Data Object)時,工程文件必須加入此元件。 TfrxIBXComponents Interbase 數(shù)據(jù)庫元件,數(shù)據(jù)庫采用IBX 連接Interbase 后臺數(shù)據(jù)庫時,工程文件必須加入此元件。上述數(shù)據(jù)庫元件,可被使用在報表的對話窗口上,它包括下列的元件: “Database”,“Table” 及“Query” 。這些元件本身并不做任何事;它們只會將元件隸屬的單元自動加入uses 清單中。 Working with TfrxReport component Loading and saving a report 存取報表報表定義表格與
54、工程文件的表格儲存在同一個文件(.DFM),在大部分的情況下,并不需要額外的操作步驟,因此載入報表便相當(dāng)簡單。假如你要將報表儲存在文件或數(shù)據(jù)庫的BLOB 字段,你必須使用“TfrxReport”提供的方法來載入及儲存報表。 function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean; 載入指定的報表,假如第二個參數(shù)的值等于”True ” 且指定的文件不存在,然后它會產(chǎn)生一個例外。假如文件載入成功,它返回“True”。 procedure LoadFromStream(S
55、tream: TStream);從數(shù)據(jù)流(stream)載入報表。 procedure SaveToFile(const FileName: String);儲存報表至指定的文件名。 procedure SaveToStream(Stream: TStream);儲存報表至數(shù)據(jù)流(stream) 。報表預(yù)置的后綴名稱為“FR3”。范例: frxReport1.LoadFromFile(c:1.fr3); frxReport1.SaveToFile(c:2.fr3); Designing a report 設(shè)計報表通過“TfrxReport.DesignReport”方法調(diào)用報表設(shè)計器(repo
56、rtdesigner),要具有設(shè)計報表的功能,你必須在工程文件中加入“TfrxDesigner”元件,或在uses 加入“frxDesgn”單元。范例:frxReport1.DesignReport; Running a report 執(zhí)行報表應(yīng)用下列兩個“TfrxReport”元件的方法啟動報表:procedure ShowReport(ClearLastReport: Boolean = True); 啟動報表并顯示結(jié)果在瀏覽窗口。假如“ClearLastReport”參數(shù)等于“False”,然后報表將會清前一份報表的末端,否則前一份報表的內(nèi)容將會被清除柚。function Prepare
57、Report(ClearLastReport: Boolean = True):Boolean; 啟動報表,但不開啟預(yù)覽窗口,參數(shù)用法同“ShowReport”方法,假如報表建立成功,它返回“True”。在大部分的情況下,采用第一種方法比較方便,當(dāng)報表建立的過程中,它會立刻顯示預(yù)覽窗口。當(dāng)我們要把報表加入上一份報表的后面時,“ClearLastReport”參數(shù)是非常方便的技巧在批次報表打印時特別有效)。范例:frxReport1.ShowReport; Previewing a report 預(yù)覽報表在報表預(yù)覽窗口顯示報表有兩種方式:不管是調(diào)用“TfrxReport.ShowReport”方
58、法(前面已提及)或使用“TfrxReport.ShowPreparedReport”方法。在第二種狀況,報表創(chuàng)建的過程不會執(zhí)行,但是報表的結(jié)果會顯示于屏幕。這個意思是說,你應(yīng)該使用“PrepareReport”方法創(chuàng)建報表或載入先前已經(jīng)建立的報表。范例: if frxReport1.PrepareReport then frxReport1.ShowPreparedReport; 在這個案例中,報表創(chuàng)建完成在先,然后顯示報表于瀏覽窗口。創(chuàng)建大型的報表可能耗費許多時間,那也是為什么使用“ShowReport”方法會比“PrepareReport/ShowPreparedReport” 來的好的原
59、因,我們指定“TfrxReport.PreviewOptions” 屬性,指定預(yù)覽的參數(shù)。 Printing a report 打印報表在大部份的情況,你會從預(yù)覽窗口打印報表。要手動打印報表,你應(yīng)該使用“TfrxReport.Print”方法,例如:frxReport1.Print; 在此同時,你可以設(shè)定打印對話窗口的參數(shù)。你可以從“TfrxReport.PrintOptions”屬性指定打印的預(yù)置值及取消顯示打印窗口。 Loading and saving a finished report 存取已完成的報表它可以從預(yù)覽窗口執(zhí)行,這也可以手動的用“TfrxReport.PreviewPage
60、s”方法執(zhí)行: function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean; procedure SaveToFile(const FileName: String); procedure LoadFromStream(Stream: TStream); procedure SaveToStream(Stream: TStream);指定參數(shù)與TfrxReport 對應(yīng)的方法類似,報表文件后綴名必須是”FP3” 。例: frxReport1.PreviewPages.L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025投資入股協(xié)議書合同
- 二零二五版網(wǎng)絡(luò)安全技術(shù)研發(fā)與知識產(chǎn)權(quán)保護協(xié)議合同2篇
- 2025版事業(yè)單位員工勞動權(quán)益及薪酬調(diào)整協(xié)議3篇
- 二零二五年度智慧路燈廣告資源共享合作協(xié)議4篇
- 不同鋅肥對旱地冬小麥產(chǎn)量和籽粒鋅提升效應(yīng)
- 2025年度柴油儲備與調(diào)撥合同規(guī)范范本4篇
- 蘭州跨境電商綜試區(qū)商務(wù)發(fā)展環(huán)境評價研究
- 二零二五年度環(huán)保項目設(shè)計施工合同2篇
- 河南省土地利用碳排放時空演變與驅(qū)動因素研究
- 二零二五年度4S店汽車銷售與汽車美容保養(yǎng)服務(wù)合同3篇
- 2024-2030年中國海泡石產(chǎn)業(yè)運行形勢及投資規(guī)模研究報告
- 動物醫(yī)學(xué)類專業(yè)生涯發(fā)展展示
- 2024年同等學(xué)力申碩英語考試真題
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計劃書
- 科普知識進社區(qū)活動總結(jié)與反思
- 加油站廉潔培訓(xùn)課件
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科??票O(jiān)測指標(biāo)匯總分析
- 混凝土結(jié)構(gòu)工程施工質(zhì)量驗收規(guī)范
- 肝性腦病患者的護理措施課件
評論
0/150
提交評論