FastReport问题集

Fastreport安装及简单使用 fastreportVCL与.NET安装 阅读详情
FastReport问题集  选自Delphi园地 http://www.delphifans.com/InfoView/Article_401.html

---------------- 使用自定义函数 ----------------------------------------

Q: 我怎样添加我的自定义函数?
A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:

procedure TForm1.frReport1UserFunction(const Name: String;
p1, p2, p3: Variant; var val: Variant);
begin
if AnsiCompareText(‘SUMTOSTR‘, Name) = 0 then
val := My_Convertion_Routine(frParser.Calc(p1));
end;

然后,你就可以在报表(任何表达式或脚本)的任何地方使用 SumToStr 函数了。


Q: 但是它仅仅能工作在一个TfrReport组件中。可我想在任何地方(在所有的TfrReport组件中)使用的我的自定义函数?
A: 使 OnUserFunction event 句柄作为所有组件的公用句柄。如果你不能做到这一点,你需要创建函数库:

type
TMyFunctionLibrary = class(TfrFunctionLibrary)
public
constructor Create; override;
procedure DoFunction(Fno: Integer; p1, p2, p3: Variant;
var val: Variant); override;
end;

constructor TMyFunctionLibrary.Create;
begin
inherited Create;
with List do
begin
Add(‘DATETOSTR‘);
Add(‘SUMTOSTR‘);
end;
end;

procedure TMyFunctionLibrary.DoFunction(Fno: Integer; p1, p2, p3: Variant;
var val: Variant);
begin
val := 0;
case Fno of
0: val := My_DateConvertion_Routine(frParser.Calc(p1));
1: val := My_SumConvertion_Routine(frParser.Calc(p1));
end;
end;

要注册函数库,调用
frRegisterFunctionLibrary(TMyFunctionLibrary);
要卸载函数库,调用
frUnRegisterFunctionLibrary(TMyFunctionLibrary);


Q: 我怎样将我的函数添加到函数列表中 (用表达式生成器)?
A: 使用 frAddFunctionDesc 过程 (在FR_Class 单元中):

frAddFunctionDesc(FuncLib, ‘SUMTOSTR‘, ‘My functions‘,
‘SUMTOSTR(<Number>)/Converts number to its verbal presentation.‘);

注意: "/" 符号是必须的! 它从它的描述中分隔函数语法。
FuncLib 被声明为你自己的函数库 (如果你不使用函数库可以将其设置为nil). 当函数库未注册时,所有它的函数将自动从函数列表中删除。


---------------- 使用变量 -------------------------------------

Q: 我怎样编程实现填充变量列表(在数据词典中)?

A: 数据词典中的所有变量及分类都被存储在 TfrReport.Dictionary.Variables 中.

with frReport1.Dictionary do
begin
// 创建分类(名称用空白)
Variables[‘ New category‘] := ‘‘;
// 创建变量
Variables[‘New Variable‘] := ‘CustomerData.Customers."CustNo"‘;
Variables[‘Another Variable‘] := ‘Page#‘;
end;

Q: 我定义了字符串变量:

with frReport1.Dictionary do
Variables[‘Month‘] := ‘March‘;

但是当我运行报表是,出现了错误,为什么?

A: 因为 FastReport 假定数据词典中的字符串变量值是一个表达式,它需要分析、计算它。
可以使用其它的方法:

with frReport1.Dictionary do
Variables[‘Month‘] := ‘‘‘‘ + ‘March‘ + ‘‘‘‘;

或者, 使用 frVariables 来传输固定数据到报表。


Q: 我不想在数据词典中显示某些数据集?

A: 使用 TfrReport.Dictionary.DisabledDatasets:

with frReport1.Dictionary do
begin
// 关闭该数据集
DisabledDatasets.Add(‘CustomerData.Bio‘);
// 或者, 关闭整个数据模块/窗体
DisabledDatasets.Add(‘CustomerData*‘);
end;


Q: 我怎样将数据传送到报表?

A: 有几个方法可以实现它. 第一是使用全局对象 frVariables (在 FR_Class 单元中被定义):

frVariables[‘My variable‘] := 10;

这段代码创建了一个名称为“My variable”,值为 10 的变量。这是最好的传输固定数据的报表的方法。

第二种方法是使用 TfrReport.OnGetValue 事件. 这可以使用这个方法来传送动态数据、记录等。

procedure TForm1.frReport1GetValue(ParName: String; var ParValue: Variant);
begin
if ParName = ‘MyField‘ then
ParValue := Table1MyField.Value;
end;

最后, 第三种方法是通过编程在数据词典中定义变量(可以参考以前的问题):

with frReport1.Dictionary do
begin
Variables[‘MyVariable‘] := ‘CustomerData.Customers."CustNo"‘;
Variables[‘Another Variable‘] := ‘10‘;
end;


Q: 我能在报表和程序间传送数据吗?
A: 使用 frVariables 对象. 如果你在报表的任何对象的脚本中写入以下代码:

MyVariable := 10

那么,在你的程序中,你可以使用以下代码来获取 MyVariable 的值:
v := frVariables[‘MyVariable‘];


---------------- 脚本 (FastReport Pascal) ---------------------------------

Q: Band 中是否可以使用脚本?

A: 当然. 选择 band ,然后按 Ctrl+Enter 或在对象浏览器中选择 "OnBeforePrint" 属性。

Q: 报表页中是否可以使用脚本?

A: 当然. 选择页 (在空白处单击) ,然后在对象浏览器中选择 "OnBeforePrint" 属性。如果该页是一个对话框窗体,那么这个属性就是 "OnActivate".


Q: 我有两个对象: Memo1 和 Memo2. 我能否在 Memo1 的脚本中调用 Memo2 的属性和方法?

A: 当然, 例如,你可以这样做: 对象名.属性名.


Q: 在脚本中,我可以使用对象的哪些属性?

A: 几乎所有你能在对象浏览器中看到的属性。例如,可以使用 Font.Name, Font.Size等来存取字体属性。


---------------- 其它问题 --------------------------------------------

Q: 怎样改变多页报表中某一页的顺序?

A: 拖动页标签到目的位置。


Q: 我想查看所有的字段及变量,我想在报表中使用列表来实现它?

A: 设置 TfrReport.MixVariablesAndDBFields := True.现在,所有的数据字段及变量可在“插入数据字段”对话框中可存取了。


Q: 我不想显示导入选项对话框?

A: 在导入组件(比如,TfrTextExport)中设置所有必需的选项,然后通过设置ShowDialog属性为False来关闭此对话框。


Q: 为什么 TotalPages 变量不起作用? 它总是返回 0.

A: 在你的报表中设置 Two-pass 选项. 要设置它,你需要在报表设计器的“文件”菜单中,打开“报表选项”对话框。


Q: 我用BLOB字段来存储我的报表。当我运行报表设计器时,它显示我的报表未命名?

A: 在运行报表设计器前,这样做:

frReport1.FileName := ‘Name of my report‘;


Q: 我想在重新定义报表设计器中的“打开”及“保存”按钮的功能?


A: 查看 TfrDesigner 组件. 它有几个必需的事件: OnLoadReport 和
OnSaveReport. 这里有一小段代码例子:

procedure TForm1.frDesigner1LoadReport(Report: TfrReport;
var ReportName: String; var Opened: Boolean);
begin
with MyOpenDialog do
begin
Opened := ShowModal = mrOk;
if Opened then
begin
Report.LoadFromBlobField(…);
ReportName := …;
end;
end;
end;

procedure TForm1.frDesigner1SaveReport(Report: TfrReport;
var ReportName: String; SaveAs: Boolean; var Saved: Boolean);
begin
if SaveAs then
with MySaveDialog do
begin
Saved := ShowModal = mrOk;
if Saved then
begin
Report.SaveToBlobField(…);
ReportName := …;
end;
end
else
Report.SaveToBlobField(…);
end;


Q: 在 QR 中, 我可以写这样的代码: QRLabel1.Caption := ‘Some text‘. 我可以用FR这样做吗?

A: FR 对象并不是一个组件 (这并不像 QR, RB). 但使用 TfrReport.FindObject 方法可以通过对象名称找到该对象。

var
t: TfrMemoView;
begin
t := TfrMemoView(frReport1.FindObject(‘Memo1‘));
if t <> nil then
t.Memo.Text := ‘FastReport‘;
end;


Q: 我想在用户预览(TfrPreview组件)中自定义热键?

A: 这个组件有个窗口: Tform 属性. 将自定义句柄指定到 Window.OnKeyDown 属性.


Q: Fast Report 2.4 不能装载 FreeReport 2.21 文件?

A: 这仅需要使用16进制数改变报表文件的第一字节,然后在源代码中修改下面的部分。在这些修改之后, 装载报表并保存它. 最后,返回到源代码处.

FR_Class:

function ReadString(Stream: Tstream): String;
begin
{ if frVersion >= 23 then}
Result := frReadString(Stream) {else
Result := frReadString22(Stream);}
end;

procedure ReadMemo(Stream: Tstream; Memo: Tstrings);
begin
{ if frVersion >= 23 then}
frReadMemo(Stream, Memo){ else
frReadMemo22(Stream, Memo);}
end;


FR_Utils:

procedure frReadMemo(Stream: Tstream; l: Tstrings);
var
s: String;
b: Byte;
n: Word;
begin
l.Clear;
l.Text := frReadString(Stream); exit;
Stream.Read(n, 2);
if n > 0 then
repeat
Stream.Read(n, 2);
SetLength(s, n);
Stream.Read(s[1], n);
l.Add(s);
Stream.Read(b, 1);
until b = 0
else
Stream.Read(b, 1);
end;

function frReadString(Stream: Tstream): String;
var
s: String;
n: Integer;
b: Byte;
begin
Stream.Read(n, 4);
SetLength(s, n);
Stream.Read(s[1], n);
if (n > 0) and (s[n] = #$0A) then
SetLength(s, n - 2);
// Stream.Read(b, 1);
Result := s;
end;


Q: 怎样不在打印预览中打印报表?
A: 这里有一段代码:

frReport1.PrepareReport;
frReport1.PrintPreparedReport(‘‘, 1, True, frAll);
或
frReport1.PrintPreparedReportDlg;


Q: 我想在报表中旋转图片。问题是这张图片是由我的应用程序生成的。是否有方法可以在打印前将这幅图片装载到报表中?

A: 使用 TfrReport.OnBeforePrint 事件:

if View.Name = ‘Picture1‘ then
TfrPictureView(View).Picture.LoadFromFile(…) 或
.Assign 或
.你所想要做的任何事情
FastReport VCL如何在 Lazarus安装FastReport FastReport VCL是用于Delphi,C ++ Builder,RAD Studio和Lazarus的报告和文档创建VCL库。它提供了可视化模板设计器,可以访问最受欢迎的数据源,报告引擎,预览,将过滤器导出为30多种格式,并可以部署到云,Web,电子邮件和打印中。 近日,FastReport VCL更新至v6.9,在新版本中,在PDF导出中增加了对以下对象的交互式表单支持:文本,复选框和图片。能够通过InteractiveFormsFontSubset属性将所需的字形仅包含在交互式形式中。同时修复 阅读详情

相关推荐

使用变量

使用变量 Q: 我怎样编程实现填充变量列表(在数据词典中)? A: 数据词典中的所有变量及分类都被存储在 TfrReport.Dictionary.Variables 中. with frReport1.Dictionary do begin // 创建分类(名称用空白) Variables[’ New category’] := ‘’; // 创建变量 Variables[‘New Variable’] := ‘CustomerData.Customers.“CustNo”’; Variables[‘An

大龙软件工作室 163

Fast Report 问题集

  Fast Report 问题集nxyc_twz@163.com---------------- 使用自定义函数 ----------------------------------------Q: 我怎样添加我的自定义函数?A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:procedure TForm1.frReport1UserFunc

开心果的专栏 3626

delphi常用函数

数据类型转换函数、字符串、数组操作函数、文件、磁盘操作函数、内存、指针操作函数、数学运算函数、日期函数。

FastReport之memo常量、变量的加减乘除与Sum、Count等聚合函数用法

本文链接:https://blog.csdn.net/qq_23376569/article/details/90901123 1.memo中的"[]"代表输出结果; 2.常量用法 eg:若memo的值为[1]+[1]在fastreport中输出1+2; eg:若memo的值为[1][2]为错误语法;[]与[]之间必须要有加减乘除的符号; eg:[1+(2*3)]在fas...

qq_18932003的博客 3217

FastReport4.2中文显示问题

FastReport4.2中文显示问题 修改frxGraphicUtils.pas 一、 查找 "if (Win32Platform <> VER_PLATFORM_WIN32_NT) or (Canvas.Font.Charset <> DEFAULT_CHARSET) then" 替换为 "if (Win32Platform <> VER_PLATFORM_WIN32_NT) or ((Canvas.Font.Charset <> DEFAULT_CHARSET) and (Canvas.Font.Charset <> GB2312_CHARSET)) then" 注:以上在该单元中有两处 二、 查找 "if (C.Font.Charset = DEFAULT_CHARSET) and (Win32Platform = VER_PLATFORM_WIN32_NT) then" 替换为 "if ((C.Font.Charset = DEFAULT_CHARSET) or (C.Font.Charset = GB2312_CHARSET)) and (Win32Platform = VER_PLATFORM_WIN32_NT) then"

Unity游戏开发实战:手把手教你用C#实现一个简单的反向运动学(IK)控制器

本文详细介绍了在Unity游戏开发中如何使用C#实现一个简单的反向运动学(IK)控制器。通过建立骨骼层级结构、实现CCD算法和角度限制,开发者可以轻松创建自然的角色动画效果。文章还提供了可视化调试工具和性能优化方案,帮助提升开发效率。

weixin_42523711的博客 244

fastreport问题集

---------------- 使用自定义函数 ----------------------------------------Q: 我怎样添加我的自定义函数?A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:procedure TForm1.frReport1UserFunction(const Name: String;p1, p2, p3: Var

liucan2000的专栏 1152

rk3326 MIPI休眠唤醒黑屏有背光问题

** 1.问题现象: ** **【开机起来】**开机起来可以正常显示 **【按power按键休眠】**第二次按下Power按键进入休眠,隔10s,再按Power按键唤醒。 **【出现结果】**屏幕黑屏有背光,并提示drm time out错 **【lcd信息】**lcd为480*800 2lane的mipi **【复现概率】**第二次按下休眠唤醒必然复现 【具体错误log如下】 //第一次休眠的log// [ 54.858511] dw-mipi-dsi ff450000.dsi: final DSI-

Ian22l的博客 3944

FastReport 问题集

作者:不详个人积累的技巧!! [FORMATDATETIME(mm-dd, [IBqryShipDate."CLOSEDATE"])][FORMATDATETIME(mm/dd/yy, [IbqryOrderForm."ORDERDATE"])]金额总计:[FORMATFLOAT(#########0.00, [TotalAmount])]订单数量:[COUNT(band1)]

Compile failed 1645

【高等数值分析】Krylov子空间方法

文章目录1. 预备理论1.1 Krylov 子空间1.2 最佳逼近1.2.1 方法一:最佳平方逼近1.2.2 方法二:假设 AAA 对称正定1.2.3 方法三:残差2范数2. 基底正交化2.1 Arnoldi 过程(CGS)2.2 改进 Arnoldi 过程(MGS)2.3 Lanczos过程3. 方程组求解3.1 全正交方法 (FOM)3.2 D-Lanczos方法3.3 广义极小残量法(GMRES)3.4 MINRES 方法 1. 预备理论 现在需要求解一个大规模稀疏方程组 Ax=bAx=bAx=b,可

Glooow的博客 1万+

NMS非极大值抑制算法原理

NMS非极大值抑制算法

pywin 3501

FastReport报表设计的问题集

FastReport报表设计的问题集Q: 我怎样添加我的自定义函数?A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:procedure TForm1.frReport1UserFunction(const Name: String;p1, p2, p3: Variant; var val: Variant);beginif AnsiCompare

传的专栏 4402

闲鱼虚拟商品自动发货神器XianYuAutoDeliveryX:从配置到对接大模型的完整指南

本文提供了一份关于闲鱼虚拟商品自动发货神器XianYuAutoDeliveryX的完整配置与实战指南。详细介绍了从环境搭建、账号安全配置到核心自动化流程的设置,并重点讲解了如何对接大语言模型API,实现智能对话回复,从而构建一套无人值守的闲鱼店铺自动化运营系统。

gray5的博客 1372

FastReport问题集 选自Delphi园地

--------------- 使用自定义函数 ----------------------------------------Q: 我怎样添加我的自定义函数?A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:procedure TForm1.frReport1UserFunction(const Name: String;p1, p2, p3: Vari

ﺴ۩๑一棵树的程序历程๑۩ﺴ 1605

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4236

FastReport问题集 选自Delphi园地 http://www.delphifans.com/InfoView/Article_401.html

---------------- 使用自定义函数 ----------------------------------------Q: 我怎样添加我的自定义函数?A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:procedure TForm1.frReport1UserFunction(const Name: String;p1, p2, p3: Var

BennyMavis的专栏 4405

[VCS]门级仿真及SDF反标

摘要:门级仿真在STA工具普及后仍是验证的重要环节,主要用于检查SDC完备性、异步电路时序、网表完整性及为功耗分析提供波形。门级仿真分为不带时序反标的前仿和带SDF反标的后仿,后仿需加载SDF文件提供精确延时信息。VCS提供多种仿真选项控制时序检查行为,SDF反标可通过命令或系统函数实现。后仿需特别注意关闭notimingcheck选项以确保时序检查有效性,并建议检查SDF反标报告和波形验证延时一致性。

元直的博客 9790

fastreport 横向分栏_FastReport开发指南

目录入门 5绪言 6关于FASTREPORT的说明 6FASTREPORT的历史 6创建报表 7数据 8参数 8窗体 9处理 10准备报表 10举例:设计一个简单报表 11FASTREPORT内核 14DELPHI控件面板 ...

weixin_39657444的博客 847

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

FastReport.Net教程大全

FastReport.Net适用于那些使用Microsoft Visual Studio 2005/2008/2010,Delphi Prizm开发工具的开发人员。本文将对FastReport.Net报表控件的使用方法作简要介绍。 如何在FastReport.Net中创建数据源和SQL查询 在FastReport中你可以非常轻松的创建数据源,由于FastReport自带的数据向导,只需要跟着对

IBigPig 6822

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

FastReport自整理技巧

[FORMATDATETIME(‘mm-dd‘, [IBqryShipDate."CLOSEDATE"])][FORMATDATETIME(‘mm/dd/yy‘, [IbqryOrderForm."ORDERDATE"])]金额总计:[FORMATFLOAT(‘#########0.00‘, [TotalAmount])]订单数量:[COUNT(band1)]数量合计:[SUM([IBqryShi

Johnny的专栏 1788

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm中使用FastReport

一、FastReport的简介 FastReport是功能齐全的报表控件,使开发者可以快速并高效地为·NET/VCL/COM/ActiveX应用程序添加报表支持。 二、FastReport的安装(推荐网址:https://www.cnblogs.com/yoyo-524/p/6116884.html) 感觉写的安装步骤很详细了,在这就不赘述了。另外提一个小问题,就是按照步骤我们安装好的是英文,怎么转成中文呢? 大家不用再去网上找中文破解包之类的,直接在菜单里找到“File”——>“Select

u013934107的博客 1万+

FastReport Studio 和 FastReport.net 用法

我个人理解FastReport Studio 和 FastReport.net 区别在于:a、前者是独立的报表工具,可通过com接口基于.net的WinForm的程序开发:1、首先在Studio中设计模板2、在vs中引入com3、在vs里调用并整理数据源bindb、后者是基于.net web开发的控件使用和Delphi中的fr

会飞的鱼的专栏 7277

fastreport

1、设置Band Allowslip 选 true stretched 选 true。2、设置Memo stretch 打勾 stretchmode选smMaxHeight。

m0_65804175的博客 3156
上一篇: SQL Server联机丛书:删除存储过程
下一篇: Tomcat配置技巧Top 10
rickylan
博客等级 码龄23年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值