- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一份使用 FastReport 4 在 DelphiXE 中编写的报告
使用存储在表中的文件名在运行时动态加载图片,使用以下内容:
procedure Picture1OnBeforePrint(Sender: TfrxComponent);
var pname : string;
begin
pname := frxGlobalVariables['imgPath']+ <frxDBDataset1."PHOTO">;
Picture1.Picture.LoadFromFile(pname);
end;
只要文件存在,它就可以正常运行。如何验证要加载的文件是否存在?
我尝试使用 Delphi FileExists() 函数,但它显然不存在于 FastReport 4
<小时/>更新:按照下面的说明,我将 FrFileExists 函数添加到了我的报告中。
我将报告中的代码调用如下:
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
Photo := imgPath + <frxDBDataset1."PICTURENAME"> + '.jpg';
if (FrFileExists(Photo)) then Picture1.LoadFromFile(Photo);
end;
我运行了运行时设计器,函数就在那里,但是正在运行我得到的报告如下:
The following error(s) have occured:
Could not convert variant of type (Null) into type (Boolean)
如果您认为变量 Photo 不正确,只要图片存在,以下代码就可以工作:
Picture1.LoadFromFile(Photo);
仍然需要让它工作。
最佳答案
FastReport 允许编写和使用自定义函数。
如何执行此操作,您可以在:FastReport DeveloperManual-en.pdf 中找到。
第 37、38、39 页的“在报表中使用自定义函数”一章
我希望这会有所帮助。
更新
Using Custom Functions in a Report
FastReport has a large number of built-in standard functions for use in report designs. FastReport also allows custom functions to be written and used. Functions are added using the “FastScript” library interface, which is included in FastReport (to learn more about FastScript refer to it’s library manual).
Let's look at how procedures and/or functions can be added to FastReport. The number and types of parameters vary from function to function. Parameters of “Set” and “Record" type are not supported by FastScript, so they must be implemented using simpler types, for instance a TRect can be passed as four integers : X0, Y0, X1, Y1. There is more about the use of functions with various parameters in the FastScript documentation.
In the Delphi form declare the function or procedure and its code.
function TForm1.MyFunc(s: String; i: Integer): Boolean;
begin
// required logic
end;
procedure TForm1.MyProc(s: String);
begin
// required logic
end;Create the “onUser” function handler for the report component.
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if MethodName = 'MYFUNC' then
Result := MyFunc(Params[0], Params[1])
else if MethodName = 'MYPROC' then
MyProc(Params[0]);
end;Use the report component’s add method to add it to the function list (usually in the “onCreate”or “onShow” event of the Delphi form).
frxReport1.AddFunction('function MyFunc(s: String; i: Integer):Boolean');
frxReport1.AddFunction('procedure MyProc(s: String)');The added function can now be used in a report script and can be referenced by objects of the“TfrxMemoView” type. The function is also displayed on the "Data tree" functions tab. On this tab functions are divided into categories and when selected a hint about the function appears in the bottom pane of the tab. Modify the code sample above to register functions in separate categories, and to display descriptive hints:
frxReport1.AddFunction('function MyFunc(s: String; i: Integer): Boolean',
'My functions',
' MyFunc function always returns True');
frxReport1.AddFunction('procedure MyProc(s: String)',
'My functions',
' MyProc procedure does not do anything');The added functions will appear under the category “My functions”. To register functions in an existing categories use one of the following category names:
- 'ctString' string function
- 'ctDate' date/time functions
- 'ctConv' conversion functions
- 'ctFormat' formatting
- 'ctMath' mathematical functions
- 'ctOther' other functions
If the category name is left blank the function is placed under the functions tree root. To add a large number of functions it is recommended that all logic is placed in a separate library unit. Here is an example:
unit myfunctions;
interface
implementation
uses SysUtils, Classes, fs_iinterpreter;
// you can also add a reference to any other external library here
type
TFunctions = class(TfsRTTIModule)
private
function CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String; var Params: Variant):Variant;
public
constructor Create(AScript: TfsScript); override;
end;
function MyFunc(s: String; i: Integer): Boolean;
begin
// required logic
end;
procedure MyProc(s: String);
begin
// required logic
end;
{ TFunctions }
constructor TFunctions.Create;
begin
inherited Create(AScript);
with AScript do
AddMethod('function MyFunc(s: String; i: Integer): Boolean',CallMethod,'My functions', ' MyFunc function always returns True');
AddMethod('procedure MyProc(s: String)', CallMethod,'My functions','MyProc procedure does not do anything'');
end;
end;
function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String;
var Params: Variant): Variant;
begin
if MethodName = 'MYFUNC' then
Result := MyFunc(Params[0], Params[1])
else if MethodName = 'MYPROC' then
MyProc(Params[0]);
end;
initialization
fsRTTIModules.Add(TFunctions);
end.Save the file with a .pas extension then add a reference to it in the “uses” clause of your Delphiproject’s form. All your custom functions will then be available for use in any report component, without the need to write code to add these functions to each “TfrxReport” and without the need to write additional code for each report component’s “onUser” function handler.
更新2
要创建自定义函数FileExists
,请在 Delphi 中声明该函数,例如:
function TForm1.FrFileExists(FileName : string):boolean;
begin
// required logic
Result := FileExists(FileName);
end;
使用报表组件的add方法将其添加到函数列表中(通常在Delphi窗体的“onCreate”或“onShow”事件中)。
procedure TForm1.FormCreate(Sender: TObject);
begin
frxReport1.AddFunction('function FrFileExists(FileName:String):Boolean','My functions',
'This function returns True if file exists');
frxReport1.DesignReport; //<-- THIS SHOW REPORT DESIGNER RUNTIME
end;
为报表组件创建“onUser”函数处理程序。
function TForm1.frxReport1UserFunction(const MethodName: string;var Params: Variant): Variant;
begin
if MethodName = 'FrFileExists' then
Result := FrFileExists(Params[0])
end;
您不能指望在Fast report IDE 设计时看到这些功能。要在 IDE 运行时查看该函数,请执行以下操作:
在uses子句中包含frxDesgn
;
使用此代码来显示设计器:
frxReport1.DesignReport; //see code On create above
运行项目,将看到 Fast Report Ide 和我们的全新函数 FrFileExists
关于delphi - 如何验证 FastReport 4 中是否存在文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813438/
我只想根据内容调整网格中列的大小。下面的代码对每一行 100% 有效,但它不会改变其上方行的宽度。无论如何要更改确实更改的行上方的行? int wCol1 = 25; public String re
我开始使用 fastreport.net 在 C# 中生成报告,因为 Crystal reports 与 .net4 不兼容。它是如此简单,但也如此复杂。我尝试通过我的应用程序将 sql 命令传递到我
我使用FastReport(评估版)主要是为了打印发票和报价单。我试图在我的数据源和应用程序逻辑之间保持分离,所以我想知道是否有一种简单的方法可以将 Delphi 对象直接公开给 FastReport
我正在尝试使用 fastreport 和 delphi 执行以下操作。我有一份报告包含... GroupHeader -------> 客户推销员的关键 MasterData -------> 客户名
我在打印时遇到问题 procedure Sendparams(const Pparams,pparvalues :array of string); begin for I
fasterport 中有一个名为 RegisterData 的方法,它创建初始数据源并将数据绑定(bind)到它。因此,我找到了一个已经在项目中运行的报告,但是当我尝试做同样的事情时,我没有在其中看
我是Pascal和FastReport的新手。在不了解FastReport的情况下,可能会回答此问题。帕斯卡是德尔福。 FastReport4。编辑:我正在使用pascal脚本。 我有一个接受8字符串
我的报告中有一个备忘录对象,需要替换“%...%”字符串。例如,在 Rave 报告中: MemoBuf.ReplaceAll('%my_str%', "new string", false); 但是
我正在使用 fastreport 报告创建标签,然后打印它。但我需要通过代码向用户展示 TfrxDesigner,以便他们可以在报表页面中拖动组件并调整其大小。 话虽如此,我需要锁定并隐藏所有菜单和工
我有一份包含以下部分的报告: 报告标题 列标题 主数据 栏页脚 报告摘要 如何在 ReportTitle 上显示 MasterData 中字段的总和? 最佳答案 我可以看到两种可能的方法: 通过报告变
我有发票报告。问题是,在将报告保存到数据库之前,我必须显示该报告以进行预览。为此,我将所有数据存储在TVirtualTables中,并将其通过TfrxDBDatasets传递给FastReport。但
我想在 FastReport 中显示图像。 这是德尔福代码: img_sick.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) +
我正在Delphi源代码中将QuickReport转换为FastReport,我想确定分配给QuickReport对象的事件方法名称,并根据它为FastReport对象的同一事件分配一个方法。我该怎么
我有一份使用 FastReport 4 在 DelphiXE 中编写的报告 使用存储在表中的文件名在运行时动态加载图片,使用以下内容: procedure Picture1OnBeforePrint(
我正在寻找 .net 的报告解决方案,我的公司在我们以前的项目中使用了 Crystal Reports XI(及其服务器版)和 SQL Server Reporting Services。然而,我们要
我已经安装了FastReport.Net用于生成报告。 我包含了以下引用资料: FastReport.dll , FastReport.Web.dll , FastReport.Bars.dll ,
我有一个 SQL 查询,其形式为: Select * from table a inner join table b on a.id = b.id; 此 SQL 的结果将发送至 FastReport。
有没有人知道如何从“快速报告”中获取 PDF 打印件? (.NET) report1.Export(frxPDFExport1); 那条线不起作用,? 最佳答案 您好,这是如何导出为 pdf 的答案。
我有一个 PageHeader 和一个带有 Header 的 MasterData .. 下一个 Header+MasterData+Footer。 如果它们不适合页面,我想将 Header+Mast
我正在将自制报告 Delphi 报告解决方案移植到 FastReport 中,并且需要一个图表来显示数据集中字段的分布(“钟形曲线”或正态分布)。以前,我编写了代码将字段值排序到单元格中(例如 100
我是一名优秀的程序员,十分优秀!