fastreport 3.18自定义函数无效的问题(100分)

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

water201

Unregistered / Unconfirmed
GUEST, unregistred user!
1、在Form中测试该函数有效果,可以正常将小写数字转换成大写金额。
2、运行程序,开设计模式,在fastreport的报表设计器中可以看到该自定义函数,但转换的结果这是空白(没有报错)。
相关函数和代码如下,请各位朋友指点
{函数定义及增加到报表部分}
function MoneyCn(mMoney: real): WideString;
var
P: Integer;
begin
if mMoney = 0 then
begin
Result := '无';
Exit;
end;
Result := NumberCn(Round(mMoney * 100) / 100);
Result := StringReplace(Result, '一', '壹', [rfReplaceAll]);
Result := StringReplace(Result, '二', '贰', [rfReplaceAll]);
Result := StringReplace(Result, '三', '叁', [rfReplaceAll]);
Result := StringReplace(Result, '四', '肆', [rfReplaceAll]);
Result := StringReplace(Result, '五', '伍', [rfReplaceAll]);
Result := StringReplace(Result, '六', '陆', [rfReplaceAll]);
Result := StringReplace(Result, '七', '柒', [rfReplaceAll]);
Result := StringReplace(Result, '八', '捌', [rfReplaceAll]);
Result := StringReplace(Result, '九', '玖', [rfReplaceAll]);
Result := StringReplace(Result, '九', '玖', [rfReplaceAll]);
Result := StringReplace(Result, '十', '拾', [rfReplaceAll]);
Result := StringReplace(Result, '百', '佰', [rfReplaceAll]);
Result := StringReplace(Result, '千', '仟', [rfReplaceAll]);
P := Pos('点', Result);
if P > 0 then
begin
Insert('分', Result, P + 3);
Insert('角', Result, P + 2);
Result := StringReplace(Result, '点', '圆', [rfReplaceAll]);
Result := StringReplace(Result, '角分', '角', [rfReplaceAll]);
Result := StringReplace(Result, '零分', '', [rfReplaceAll]);
Result := StringReplace(Result, '零角', '', [rfReplaceAll]);
Result := StringReplace(Result, '分角', '', [rfReplaceAll]);
if Copy(Result, 1, 2) = '零圆' then
Result := StringReplace(Result, '零圆', '', [rfReplaceAll]);
end else
Result := Result + '圆整';
Result := '人民币{大写}:' + Result;
end;
{ MoneyCn }
///////End Source
function frxReport1UserFunction( const MethodName: String ;var Params: Variant): Variant;
begin
if MethodName = 'MONEYCN' then
Result := MoneyCn(Params[0]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
frxReport1.AddFunction('function MoneyCn(mMoney: real): WideString;');
end;

{下面的的文本能正常转换}
procedure TForm1.DBEdit3Change(Sender: TObject);
begin
edit5.text:=MoneyCn(2345);
end;
 
问题已经解决了,原来自定义函数并不难,是因为我这里出错了
function frxReport1UserFunction( const MethodName: String ;var Params: Variant): Variant;
begin
if MethodName = 'MONEYCN' then
Result := MoneyCn(Params[0]);
end;
应该是下面的(少了Tform1),但不知道为什么,我手工去加就是不行,编译出错,
但我通过report1控制的事件可以正常进入!
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
 
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;

事件调用你的函数就OK了。
结分。
我也给你100。
 
版本,结帖子吧!在论坛等了6小时,我已经自己查资料解决了!
 
最后怎么解决的?
 
结帖了,自己解决的,所以给bbscom10的辛苦费用 !
 
后退
顶部