FastReport引擎通常负责 表的构建。有时有必要创建非标准格式的 告,而FastReport引擎无法生成该 告,但可以借助TfrxReport.OnManualBuild事件来手动构建 告的功能。
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 dobegin { 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 bandsBand1 := 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 dobegin 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正在 火热销售中!>>查看价格详情
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!