fastreport如何加入自定义函数?(高手帮帮忙吧)(100分)

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

whxxr

Unregistered / Unconfirmed
GUEST, unregistred user!
我在网上找了大写转换函数,总共有3个
function ntoc(a:real;bool:boolean):string;
function change(a:real;bool:boolean):string;
function numtoc(c:string):string;
procedure TForm1.frReport1UserFunction(const Name: String;
p1, p2, p3: Variant;
var val: Variant);
begin
if AnsiCompareText('ntoc', Name) = 0 then
val := My_Convertion_Routine(frParser.Calc(p1));
if AnsiCompareText('numtoc', Name) = 0 then
val := My_Convertion_Routine(frParser.Calc(p1));
if AnsiCompareText('change', Name) = 0 then
val := My_Convertion_Routine(frParser.Calc(p1));
end;
!
编译时总是说 My_Convertion_Routine没定义,如果将其去掉,可以编译成功。
但在文本框中调用时ntoc(111.11,false),只是显示数字,根本没转换,你可以给我写的详细一些吗?我也看了例子和帮助文件,看不懂!你给我的和控件带的FAQ是一样的。谢谢!
 
你的 My_Convertion_Routine 在哪里定义的?
 
我没定义,我是照FAQ照搬的。我还不明白这是什么意思
 
呵呵,意思就是让你[red]自己写实现函数[/red]!
比如你在你的源文件里面写了一个
function My_ntoc(a: real;
bool: boolean): string;
begin
Result := 'Test' + FloatToStr(a) + 'Test';
end;

然后你这样用:
procedure TForm1.frReport1UserFunction(const Name: String;
p1, p2, p3: Variant;
var val: Variant);
begin
if AnsiCompareText('ntoc', Name) = 0 then
val := [blue]My_ntoc[/blue](frParser.Calc(p1), true);
...
end;
 
我用了很久没有问题阿。
哎呀 人家是说要你在这里调用你自己定义的函数而已。
procedure TForm1.frReport1UserFunction(const Name: String;
p1, p2, p3: Variant;
var val: Variant);
begin

try
if AnsiCompareText('ntoc', Name) = 0 then
val :=ntoc(p1);
if AnsiCompareText('numtoc', Name) = 0 then
val := numtoc(p1);
if AnsiCompareText('change', Name) = 0 then
val := change(p1);
except
end;
end;

// 说明;
const Name 就是你的函数名 fastreport 判断查找出来的
p1,p2,p3就是参数。
val 就是返回值;
这下 你可以随心所欲的了,你要想用几十个自定义函数都可以(速度有一定影响);

这个分数该给我了吧
 
不会吧 我打几个字,抽支烟 就有人先比我贴出来了。。。。。。。
 
多人接受答案了。
 
//不会吧 我打几个字,抽支烟 就有人先比我贴出来了。。。。。。。
因为我不吸烟:)[:D]
 
可能這就是抽煙對于程序員的最大為害吧﹗
 
后退
顶部