FastReport VCL程序员手册:借助代码构建报告

翻译|使用教程|编辑:杨鹏连|2021-04-25 09:41:50.940|阅读 17 次

概述:FastReport引擎通常负责报表的构建。有时有必要创建非标准格式的报告,而FastReport引擎无法生成该报告,但可以借助TfrxReport.OnManualBuild事件来手动构建报告的功能。

# 31款JAVA开发必备控件和工具 #

相关链接:

FastReport VCL是用于Delphi,C ++ Builder,RAD Studio和Lazarus的报告和文档创建VCL库。它提供了可视化模板设计器,可以访问为30多种格式,并可以部署到云,网站,电子邮件和打印中。

近日,FastReport VCL更新至v6.9,在新版本中,在PDF更新中增加了对以下对象的并行表单支持:文本,替换和图片。能够通过InteractiveForms字体子集属性将所需的字形仅包含在相互之间形式中。同时修复了多个Bug问题。欢迎下载体验。(旁边向下按钮下载)

立即点击下载FastReport VCL v6.9最新版

FastReport引擎通常负责报表的构建。它以特定顺序显示报告的频段,次数与报告所连接的数据源所需的次数相同,因此形成了完整的报告。有时有必要创建非标准格式的报告,而FastReport引擎无法生成该报告。在这种情况下,可以借助TfrxReport.OnManualBuild事件来手动构建报告的功能。如果要定义此事件的处理程序,则FastReport引擎将管理发送给该事件。同时,以以下方式更改了形成报告的职责分配:
FastReport引擎:

  • 报告的准备(脚本,数据源初始化,乐队的树形结构)
  • 所有计算(聚合函数,事件处理程序)
  • 新页面/列的形成(自动显示页面/列的页眉/页脚,报告标题/摘要)
  • 其他日常工作
处理程序:
  • bands的演出按一定顺序
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并排放置。
Pascal:
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正在慧都网火热销售中!>>查看价格详情


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至hey@evget.com

文章转载自:Fast Reports

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
在线咨询
联系我们
TOP
在线客服系统
live chat