翻譯|使用教程|編輯:楊鵬連|2021-04-25 09:41:50.940|閱讀 209 次
概述:FastReport引擎通常負責報表的構建。有時有必要創建非標準格式的報告,而FastReport引擎無法生成該報告,但可以借助TfrxReport.OnManualBuild事件來手動構建報告的功能。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
FastReport VCL是用于Delphi,C ++ Builder,RAD Studio和Lazarus的報告和文檔創建VCL庫。它提供了可視化模板設計器,可以訪問為30多種格式,并可以部署到云,網站,電子郵件和打印中。
近日,FastReport VCL更新至v6.9,在新版本中,在PDF更新中增加了對以下對象的并行表單支持:文本,替換和圖片。能夠通過InteractiveForms字體子集屬性將所需的字形僅包含在相互之間形式中。同時修復了多個Bug問題。歡迎下載體驗。(旁邊向下按鈕下載)
FastReport引擎通常負責報表的構建。它以特定順序顯示報告的頻段,次數與報告所連接的數據源所需的次數相同,因此形成了完整的報告。有時有必要創建非標準格式的報告,而FastReport引擎無法生成該報告。在這種情況下,可以借助TfrxReport.OnManualBuild事件來手動構建報告的功能。如果要定義此事件的處理程序,則FastReport引擎將管理發送給該事件。同時,以以下方式更改了形成報告的職責分配:
FastReport引擎:
處理程序:
OnManualBuild處理程序的本質是發出有關將某些頻段呈現給FastReport引擎的命令。引擎本身將完成剩下的工作:只要當前頁面中沒有位置,就會創建一個新頁面。腳本將被執行。
引擎由TfrxCustomEngine類表示。此類的實例的鏈接位于該TfrxReport.Engine屬性中。
讓我們舉一個簡單的處理程序的例子。報告中有兩個“主數據”帶,它們未連接到數據。處理程序以隔行順序呈現這些頻段,每個頻段六次。在六個頻段之后,會出現一個很小的間隙。
Pascal:var i: Integer; Band1, Band2: TfrxMasterData; { find required bands } Band1 := frxReport1.FindObject('MasterData1') as TfrxMasterData; Band2 := frxReport1.FindObject('MasterData2') as TfrxMasterData; for i := 1 to 6 do begin { lead/deduce bands one after another } frxReport1.Engine.ShowBand(Band1); frxReport1.Engine.ShowBand(Band2); { make a small gap } if i = 3 then frxReport1.Engine.CurY := frxReport1.Engine.CurY + 10; end;C ++:
int i; TfrxMasterData * Band1; TfrxMasterData * Band2; // find required bands Band1 := dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData1")); Band2 := dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData2")); for(i = 1; i <= 6; i++) { // lead/deduce bands one after another frxReport1->Engine->ShowBand(Band1); frxReport1->Engine->ShowBand(Band2); // make a small gap if(i == 3) frxReport1->Engine->CurY += 10; }下一個示例顯示兩組bands并排放置。
var i, j: Integer; Band1, Band2: TfrxMasterData; SaveY: Extended; Band1 := frxReport1.FindObject('MasterData1') as TfrxMasterData; Band2 := frxReport1.FindObject('MasterData2') as TfrxMasterData; SaveY := frxReport1.Engine.CurY; for j := 1 to 2 do begin for i := 1 to 6 do begin frxReport1.Engine.ShowBand(Band1); frxReport1.Engine.ShowBand(Band2); if i = 3 then frxReport1.Engine.CurY := frxReport1.Engine.CurY + 10; end; frxReport1.Engine.CurY := SaveY; frxReport1.Engine.CurX := frxReport1.Engine.CurX + 200; end;C ++:
int i, j; TfrxMasterData * Band1; TfrxMasterData * Band2; Extended SaveY; Band1 = dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData1")); Band2 = dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData2")); SaveY = frxReport1->Engine->CurY; for(j = 1; j <= 2; j++) { for(i = 1; i <= 6; i++) { frxReport1->Engine->ShowBand(Band1); frxReport1->Engine->ShowBand(Band2); if(i == 3) frxReport1->Engine->CurY += 10; } frxReport1->Engine->CurY = SaveY; frxReport1->Engine->CurX += 200; }
如果您對FastReport感興趣,歡迎加入FastReport QQ交流群:801349317
還想要更多嗎?您可以點擊閱讀【FastReport報表2020最新資源盤點】,查找需要的教程資源。讓人興奮的是FastReport .NET正在慧都網火熱銷售中!>>查看價格詳情
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: