彩票走势图

FastReport VCL报表控件开发者手册七:自定义函数

原创|其它|编辑:郝浩|2012-12-03 11:23:37.000|阅读 810 次

概述:FastReport VCL报表控件拥有大量可用于报表设计的内置标准函数。此外,FastReport VCL报表还允许编写和使用自定义函数。本文主要介绍我们就一起来看看如何将程序/函数添加到FastReport VCL报表。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

FastReport VCL报表控件拥有大量可用于报表设计的内置标准函数。此外,FastReport VCL报表还允许编写和使用自定义函数。通过 FastReport中的“FastScript”库接口可添加函数。

接下来,我们就一起来看看如何将程序/函数添加到FastReport。参数的数量和类型根据函数的变化而变化。 FastScript不支持“Set” 和 “Record"类型的参数。

在Delphi窗体中,声明了函数,程序以及其代码:

function TForm1.MyFunc(s: String; i: Integer): Boolean;
begin
// required logic
end;
procedure TForm1.MyProc(s: String);
begin
// required logic
end;

为报表控件创建“onUser”函数处理器:

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;

通过报表控件的add方法将函数添加到函数列表中。

frxReport1.AddFunction('function MyFunc(s: String; i: Integer):Boolean');
frxReport1.AddFunction('procedure MyProc(s: String)');

所添加的函数可在报表脚本中使用,并可以被“TfrxMemoView”类型的对象引用。此外,该函数还可以显示在"Data tree" 函数选项卡上。在该选项卡上,函数被划分为多个类别,当选择函数提示时,该函数便出现在标签的底部窗格中。

修改上面的代码示例实现在不同类别中注册函数,并显示描述性提示:

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');

所添加的函数将出现在“My functions”类别中。

请使用下列其中一个类别名称,在已有类别中注册函数:

-'ctString' :string function
- 'ctDate': date/time functions
- 'ctConv' :conversion functions
- 'ctFormat' :formatting
- 'ctMath' :mathematical functions
- 'ctOther': other functions

如果类别名称在左边空白处,函数便被置于函数树的根目录。若要添加大量的函数,建议所有的逻辑被放置在一个独立的库单元。例如:

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.

保存该文件,并将其扩展名命名为.pas。然后,添加索引到该文件夹。此时,你便可以在任何报表组件中使用这些自定义的函数,无需编写代码来将这些函数添加的每个“TfrxReport”组件,也无需为每个报表控件的 “onUser” 事件处理程序编写额外的代码。

 


标签:

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

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP