FastReport中国社区FastReport联系电话 联系电话:023-68661681

如何扩展FastReport函数

来源:   发布时间:2016-08-08   浏览:3663次

FastReport生成器是开放的,意味着你可以通过自己的函数库、新的可视控件、输出文件格式和向导来扩展它。这部分包括了进行这种扩展的方法。

设计你自己的预览窗口

有时需要用你自己的预览窗口来替换标准的。这个方法能被用于当在输出前运行附加的函数(例如插入打印数据到数据表中)或去除预览窗口中不需要的部分。

FastReport允许开发者用任何方法开发自己的预览窗口。FastReport控件面板上中的TfrPreview控件就是为了达到这个目的。这个控件的主要功能有:

l First, Prev, Next, Last -在报表中进行导航:首页、上页、下页、末页;

l SaveToFile-保存已生成的报表到任何支持的文件格式中;

l LoadFromFile-从*.FRP格式的文件中调入已生成的报表;

l Print-打印已生成的报表;

l OnePage-设置预览的比例为一页大小;

l PageWidth-设置预览的页面宽度。

除了上面可用的功能外,TfrPreview还有一个Zoom属性用于设置缩放显示。这个缩放显示可以按原始尺寸的比例进行缩放。TfrPreview控件还将显示滚动条和用于显示在文档中的当前页和总页数的状态栏。

要替换标准预览窗口到FastReport报表生成器,TfrReport控件的预览属性必须相应地改变为这个窗口。你可以从FastReport“Examples”目录中的“Report”子目录中找到使用自定义预览窗口的例子。

扩展函数列表

这个手册很早就描述了怎样扩展FastReport的函数功能。这个方法是基于TfrReport控件的OnUserFunction事件。这个方法的缺点是:所有的TfrReport对象的自定义函数都必须放在同一个OnUserFunction事件处理中(也就是自定义函数都必须到TfrReport中去找)。作为选择,你也可以将一系列的函数放到一个单独的类库中(函数类库)。

FastReport支持这种可选方法,你可以写一个TfrFunctionLibrary的继承类(“继承”什么?-或者可以使用“引用”)。这个类中定义了一些开发者需要了解的FastReport工作的基本属性和方法。

这是TfrFunctionLibrary在FR_Class模块中的声明:

TfrFunctionLibrary = class(TObject)

public

  List: TStringList;

  constructor Create; virtual;

  destructor Destroy; override;

  function OnFunction(const FName: String; p1, p2, p3: Variant;

    var val: String): Boolean;

  procedure DoFunction(FNo: Integer; p1, p2, p3: Variant; var val: String);

    virtual; abstract;

end;

下面是一些关键模块:

Create-设计器生成一个可用的函数列表,并按大写字母顺序;

DoFunction-当调用时,这个方法用于返回(返回什么?)使用参数计算的函数值。每个函数最多有三个参数。这些参数的值是通过DoFunction的P1,P2,P3参数取得。

下面是一个有两个函数的简单例子:

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

    Add('SUMPROPIS');

  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;

要在FastReport中激活已定义的函数类库,你需要注册它。意思是调用frRegisterFunctionLibrary方法并将这个类库作为它的一个参数(不是类的实例)。例如:

frRegisterFunctionLibrary(TMyFunctionLibrary);

要增加附加函数列表以“插入函数”对话框中,你需要通过下列参数调用frAddFunctionDesc方法:

函数名称;

这个函数的分类名;

这个函数的语法和目的的描述。注意:在函数描述中必须有“/”标记!它用于在函数中分隔语法描述。

记住每个函数都需要单独调用rAddFunctionDesc。这里有一个在表达式生成器中注册函数的例子:

frAddFunctionDesc('SUMPROPIS', 'My functions', 

  'SUMPROPIS(<Number>)/Returns value spelled out.');

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/1191.html

联系我们
  • 重庆总部 023-68661681
购买
  • sales@evget.com
合作
  • business@evget.com


在线
客服
微信
QQ 电话
023-68661681
返回
顶部