泣求FastReport中自定义函数问题 (38分)

  • 主题发起人 主题发起人 wuque2000
  • 开始时间 开始时间
W

wuque2000

Unregistered / Unconfirmed
GUEST, unregistred user!
帮助里面写了一大堆:!!!!!!!!但我怎么办呀,从哪里写这些代码啊?????????,怎么执行啊??????????????????????????我想自己加一个自定义函数啊,化数字(分钟)为时间,比如90化为时间为“01:30”,但我该怎么加啊,看不懂下面的帮助啊。 因为我的报表里多个Memo需要自定义函数的,仅仅那个onuserfunction似乎达不到要求!!!!
//////////////////////////////////////
type
TMyFunctionLibrary = class(TfrFunctionLibrary)
public
constructor Create;
override;
proceduredo
Function(FNo: Integer;
p1, p2, p3: Variant;
var val: Variant);
override;
end;

constructor TMyFunctionLibrary.Create;
begin

inherited Create;
with Listdo

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

问: 怎样可以把自定义函数增加到函数列表中去?
答: 用frAddFunctionDesc过程(在FR_Class单元中):
frAddFunctionDesc(FuncLib, 'SUMTOSTR', 'My functions',
'SUMTOSTR(<Number>/Converts number to its verbal presentation.');

注意: "/"符号是必需的!它标示了哪段是函数的声明部分哪段是描述部分.
FuncLib指向你的函数库(可以为nil如果你没有使用函数库的话),当函数库取消注册时,
它包含的所有函数自动从函数列表中移出。
 
郁闷啊~,顶一次~
 
就没高手回答这个问题吗?是问题太浅还是太难?
 
也只是看了幫助是這樣說。沒用過。
應該是寫到FR的源碼的單元中(那個TfrFunctionLibrary)所在的單元。
或者是FR的源碼包中另掛一個單元
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1503655
fastreport如何加入自定义函数?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1503652
fastreport如何加入自定义函数?(
 
谢谢app2001,按照你提供的方法可以达到要求。但是这样每一个自定义函数好像只能给一个报表里的memo用。
我现在在一个报表里,有十几个memo需要用到同一个自定义函数。如要按照上面的方法,需要定义十几次。如果能够写一个函数并注册而且添加到函数列表中,那就完美了!但这个对我来说太难了。可否指教一二?
 
再给你贴一段帮助
---------------- 使用自定义函数 ----------------------------------------
问: 我怎样才可以自己添加函数?
答: 用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;
proceduredo
Function(FNo: Integer;
p1, p2, p3: Variant;
var val: Variant);
override;
end;

constructor TMyFunctionLibrary.Create;
begin

inherited Create;
with Listdo

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

问: 怎样可以把自定义函数增加到函数列表中去?
答: 用frAddFunctionDesc过程(在FR_Class单元中):
frAddFunctionDesc(FuncLib, 'SUMTOSTR', 'My functions',
'SUMTOSTR(<Number>/Converts number to its verbal presentation.');

注意: "/"符号是必需的!它标示了哪段是函数的声明部分哪段是描述部分.
FuncLib指向你的函数库(可以为nil如果你没有使用函数库的话),当函数库取消注册时,
它包含的所有函数自动从函数列表中移出。
 
晕,又绕到我顶楼的问题去了!!!
 

Similar threads

后退
顶部