---------------- 使用自定义函数 ----------------------------------------
问: 我怎样才可以自己添加函数?
答: 用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函数:)
问: Ok, 但是这个函数仅仅在一个TfrReport组件中其作用.可以让这个函数在所有的
TfrReport组件中都能使用吗?
答: 给所有报表组件的OnUserFunction事件赋句柄:)如果你不想这么干的话,你就
只好创建一个函数库了:
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);