创建QuickReport的自定义函数

n年没有用QuickReport了,最近要用它写报表,中间写一个复杂的报表表达式时,觉得太复杂了,决定自己写一个QuickReport的自定义函数。QuickReport的函数实现方法还是挺简单的,只要从TQREvElementFunction基类派生,并实现Calculate方法就可以了,所有传进来的参数可以通过Argument方法获取。

function TQREvAcountFunction.Calculate: TQREvResult;
var
strDeType:string;
function GetResultType:TQREvResultType;
begin
Result:=resDouble;
end;
function ZeroResult:TQREvResult;
begin
Result.Kind:=resDouble;
Result.dblResult:=0;
end;
begin
if (ArgList.Count = 2) and (Argument(0).Kind = resString) and ((Argument(1).Kind=resDouble) or (Argument(1).Kind=resInt)) then
begin
strDeType:=Trim(Argument(0).strResult);
if MatchType(strDeType) then
Result := Argument(1)
else
Result :=ZeroResult ;
end else
Result := ErrorCreate(Format(SqrExpWrongArguments, ['Account Function'])); // Do not translate
end;

const
SqrDesc = 'Returns <X> or 0 depending on the <Type>';
SqrSoft = 'Sysa';
initialization
RegisterQRFunction(TQREvEtcFunction,'Etc', 'Etc(<Type>, <Count>)|' + SqrDesc, SqrSoft, '2SN');

唯一要注意的是RegisterQRFunction的第四个参数是一个字符串,2表示统计函数,S表示第一个参数是字符串,N表示第2个参数是数字。