翻譯|使用教程|編輯:楊鵬連|2021-04-25 09:41:50.940|閱讀 225 次
概述: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@ke049m.cn
文章轉載自: