本文作者:icy

Delphi-FastReport VCL/FMX 高效灵活的报表生成控件(已支持最新D13)

icy 昨天 43 抢沙发
Delphi-FastReport VCL/FMX  高效灵活的报表生成控件(已支持最新D13)摘要: FastReport  是专为 Delphi 和 C++ Builder 开发者设计的一款功能强大、高效灵活的报表生成控件。...

Delphi-FastReport VCL/FMX  高效灵活的报表生成控件(已支持最新D13)

FastReport  是专为 Delphi 和 C++ Builder 开发者设计的一款功能强大、高效灵活的报表生成控件。

它为你提供了从数据连接到报表设计、预览到最终输出的全流程解决方案。

下面是一个汇总了其主要特性的表格,方便你快速了解:


特性分类具体描述
核心功能提供报表引擎、可视化设计器、预览窗口、对话框设计工具、类 Pascal 宏解释器。
数据源支持支持 BDE、ADO、InterBase、FireDAC、IBX、FIBPlus 等多种数据库访问库,以及字符列表、Pascal 数组和记录等。
报表输出格式支持 TXT, RTF, CSV, HTML, PDF 等多种格式。
脚本支持内置类 Pascal 宏语言(PascalScript),允许在报表中编写复杂逻辑,无需依赖 Delphi 环境。同时也支持 C++ Script, BasicScript, JScript。
设计时支持所见即所得的设计器,支持最终用户运行时自定义报表。
交互与扩展支持交互式表单、下钻报表、自定义函数、地图对象(OSM, ESRI)、多种条形码(PDF417, DataMatrix等)、图表等。
部署与集成无需额外 DLL,可直接编译进 EXE。支持将报表发布到云存储(如 DropBox、OneDrive)、电子邮件、FTP 等。
国际化支持 Unicode(多语言同时显示),设计界面本地化多达数十种语言。


🧩 核心组件
FastReport VCL 的核心组件主要包括:

  • TfrxReport:报表核心组件,负责加载、运行和展示报表。

  • TfrxDBDataset:用于连接 Delphi 的 TDataset 后代数据集组件(如 TADOQuery、TFDQuery),将数据源关联到报表。

  • TfrxUserDataSet:可用于在代码中手动构建数据源,非常适用于非数据库数据或动态数据。

⌨️ 基础演示代码

下面的代码示例展示了如何在 Delphi 中使用 FastReport VCL 进行一些常见操作。

1. 传递变量到报表

你可以在 Delphi 代码中定义变量并在报表中使用它们。

// 创建报表对象并加载报表文件
var
  Report: TfrxReport;
begin
  Report := TfrxReport.Create(nil);
  try
    Report.LoadFromFile('report.fr3');

    // 添加一个变量并设置其值
    Report.Variables.Add('Variable1'); 
    Report.Variables.Items['Variable1'].Value := 'Hello World!';

    // 显示报表预览
    Report.ShowReport(True);
  finally
    Report.Free;
  end;
end;

报表中使用变量:在报表设计器中,在任何文本对象(如 TfrxMemoView)的 Text 属性中输入 [Variable1] 即可显示该变量的值。

2. 动态创建简单的报表

如果你需要完全通过代码来创建报表

var
  DataPage: TfrxDataPage;
  Page: TfrxReportPage;
  Band: TfrxBand;
  DataBand: TfrxMasterData;
  Memo: TfrxMemoView;
begin
  // 清除现有报表
  frxReport1.Clear;

  // 将数据集添加到报表可访问的数据集列表
  frxReport1.DataSets.Add(frxDBDataSet1); // 假设 frxDBDataSet1 已关联到你的 TDataset

  // 添加一个"Data"页(对于某些类型的内部数据集是必要的)
  DataPage := TfrxDataPage.Create(frxReport1);

  // 创建报表页面
  Page := TfrxReportPage.Create(frxReport1);
  Page.CreateUniqueName;   // 创建唯一名称
  Page.SetDefaults;        // 设置默认页面尺寸(如A4)、边距
  // Page.Orientation := poLandscape; // 如需设置横向

  // 添加报表标题 band
  Band := TfrxReportTitle.Create(Page);
  Band.CreateUniqueName;
  Band.Top := 0;         // 顶部坐标(像素)
  Band.Height := 20;     // 高度(像素)

  // 在标题 band 上添加一个文本对象
  Memo := TfrxMemoView.Create(Band);
  Memo.CreateUniqueName;
  Memo.Text := 'Hello FastReport!';
  Memo.Height := 20;
  Memo.Align := baWidth; // 宽度对齐 band

  // 添加主数据 band (MasterData) 来显示数据
  DataBand := TfrxMasterData.Create(Page);
  DataBand.CreateUniqueName;
  DataBand.DataSet := frxDBDataSet1; // 指定数据源
  DataBand.Top := 100;   // 设置 Top 坐标,避免重叠
  DataBand.Height := 20;

  // 在主数据 band 上添加一个显示数据的文本对象
  Memo := TfrxMemoView.Create(DataBand);
  Memo.CreateUniqueName;
  Memo.DataSet := frxDBDataSet1;   // 关联数据集
  Memo.DataField := 'CustNo';      // 指定字段名
  Memo.SetBounds(0, 0, 100, 20);   // 设置位置和大小 (Left, Top, Width, Height)
  Memo.HAlign := haRight;          // 文本右对齐

  // 显示报表
  frxReport1.ShowReport;
end;

说明:此代码动态创建了一个包含标题和主数据列表的简单报表。

3. 打印固定行数(补空行)

在一些表单打印中,常常需要每页固定行数,不足时用空行补足。


这通常可以在报表的 脚本 中实现(例如在 MasterData 的 OnAfterPrint 或 Page Footer 的 OnBeforePrint 事件中编写脚本逻辑来判断和补空行)。这里提供一个思路:

  1. 在报表设计中,计算每页所需固定行数(比如5行)与当前页已打印数据行数的差值。

  2. 根据差值,在页脚(或其它合适区域)之前循环打印空行(使用 ShowBand 方法调用一个只包含空白内容的 Child Band)。

由于其逻辑相对复杂且高度依赖于报表的具体设计,建议参考 FastReport 官方文档或社区关于 "固定行数" 和 "补空行" 的详细教程和示例。

💡 进阶技巧

  • 查找报表对象:使用 FindObject 方法在运行时修改已存在报表对象的属性。

TfrxMemoView(frxReport1.FindObject('memo1')).Text := 'New Text at Runtime!';

添加自定义函数:你可以注册自定义函数供报表脚本调用。

  • 添加函数声明

frxReport1.AddFunction('Function MyCustomFunction(Param: String): String;');

处理函数调用:在 TfrxReportOnUserFunction 事件中实现函数逻辑。

function TForm1.frxReport1UserFunction(const MethodName: String; var Params: Variant): Variant;
begin
  if MethodName = 'MYCUSTOMFUNCTION' then
    Result := 'Processed: ' + VarToStr(Params[0]); // 处理参数并返回结果
end;

使用注意事项

  1. 数据集关联:务必在运行报表前,将 TfrxDBDataSetTfrxUserDataSetDataSet 属性指向有效的 TDataset 组件(如 TQuery, TADOQuery等),并将这些 TfrxDBDataSet 添加到报表的 DataSets 列表中(frxReport1.DataSets.Add(frxDBDataSet1)),否则报表无法获取数据。

带宽高度:动态创建 Band 和对象时,注意设置正确的 TopHeight 属性,避免重叠。

对象定位:对象的坐标和大小以像素为单位。FastReport 提供了转换常数(如 fr1cm)方便设置

Band.Height := fr1cm * 0.5; // 设置 Band 高度为 0.5 厘米
  • 设计器与代码:对于固定格式的报表,优先使用可视化设计器设计(.fr3文件),代码主要负责加载、传递参数和运行。对于高度动态化的报表,可考虑代码创建或混合方式。


FastReport FMX v2025.2 for Delphi 13 Florence Retail.zip
类型:压缩文件|已下载:8|下载方式:免费下载
立即下载
FastReport VCL v2025.2 for Delphi 13 Florence Retail.zip
类型:压缩文件|已下载:9|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://zelig.cn/2025/09/127.html发布于 昨天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

验证码

评论列表 (暂无评论,43人围观)参与讨论

还没有评论,来说两句吧...