fastreport3.03中的小写转大写问题(50分)

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
是不是你的3.03有问题;你下个3.2.25试试,我这儿可以,'Test'只是看一下测试结果;在设计里用[MyFunction('cc')];结果显示为Testcc
 
我用的3.25,自定义成功!
 
我也能够显示出testcc了,但用我的自定义函数就不行,
我是这样写的
if UpperCase(MethodName) = UpperCase('Currency') then
Result := 'Test' + Params[0];
__________________________________________________________
frxReport1.AddFunction('function Currency(rmb:Double):string;');
frxReport1.ShowReport;
_____________________________________________________________
MEMO中是这样写的[Currency(123.5)]
______________________________________________________________
我的转换函数:
function Tprintform.Currency(rmb:do
uble): string;
var s1,s2,s3,s4,dxs:string;
l,l1,l2,l3:integer;
begin
s1:='分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟万';
s2:='零壹贰叁肆伍陆柒捌玖';
l:=length(floattostr(rmb));
。。。。。。(这段代码我就不写了,肯定正确的)
end;
上面的转换函数我直接用是好用的,我是这样用的:
begin
S1:=Format('%.2f',[ ADOQuery1.Fieldbyname('单项累计').AsFloat]);
if strtofloat(s1)>0 then
begin
S2:=Currency(StrToFloat(S1) );
 
frxReport1.AddFunction('function Currency(rmb:Float):string;');
 
改成float 也是提示真实变量太多
 
你的函数名是不是和fastreport定义的类型重名了,你改个名字;不行把参数搞成string
 
我的转换函数:
function Tprintform.Currency(rmb:do
uble): string;
var s1,s2,s3,s4,dxs:string;
l,l1,l2,l3:integer;
begin
s1:='分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟万';
s2:='零壹贰叁肆伍陆柒捌玖';
l:=length(floattostr(rmb));
if copy(floattostr(rmb),l-2,1)='.' then
begin
dxs:=floattostr(abs(rmb));
end
else
begin
if copy(floattostr(rmb),l-1,1)='.' then
dxs:=floattostr(abs(rmb))+'0'
else
dxs:=floattostr(abs(rmb))+'.00'
end;
l1:=length(dxs);
dxs:=copy(dxs,1,l1-3)+copy(dxs,l1-1,2);
s3:='';
l2:=length(dxs);
l3:=0;
while l2>0do
begin
s3:=copy(s1,l3*2+1,2)+s3;
s3:=copy(s2,strtoint(copy(dxs,l2,1))*2+1,2)+s3;
l2:=l2-1;
l3:=l3+1;
end;
s4:='';
l2:=1;
while l2<length(s3)do
begin
if copy(s3,l2,2)='零' then
begin
if copy(s3,l2+2,2)='万' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'万'
else
s4:=s4+'万';
end;
if copy(s3,l2+2,2)='元' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'元'
else
s4:=s4+'元';
end;
if copy(s3,l2+2,2)='亿' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'亿'
else
s4:=s4+'亿';
end;
if copy(s4,length(s4)-1,2)<>'零' then
s4:=s4+'零';
end
else
s4:=s4+copy(s3,l2,4);
l2:=l2+4;
end;
if copy(s4,length(s4)-3,4)='元零' then
begin
s4:=copy(s4,1,length(s4)-2)+'整';
end;
if copy(s4,length(s4)-3,4)='角零' then
begin
s4:=copy(s4,1,length(s4)-2)+'整';
end;
if copy(s4,length(s4)-1,2)='零' then
begin
s4:=copy(s4,1,length(s4)-2)+'元整';
end;
Currency:=s4;
end;
 
1,frxReport1.AddFunction('function Currency1111(rmb:Float):string;');
2,if UpperCase(MethodName) = UpperCase('Currency1111') then
Result := Currency(Params[0]);
3,报表用[Currency1111(123)]
 
终于搞定了,对doud2006前辈的指导真是十分感激!
以前不成功能的原因可能如下:Currency可能是FASTREPORT中的一个已经被用的函数,所以不能重名。rmb:Float中可以不改,仍为原来的double。
再次感谢!
 
你在FASTREPORT的FILE 的 DATA DICTIONARY数据字典的VARIABLES里添加一个变量,先把转换好的结果保存到一个中间变量中
先点一个像文件夹关闭的Category1 然后再点 它后面的一个 NEW VARIABLES 添加一个变量默认是VARIABLES1 你可以把它改成你自己的变量名
再把MEMO的值选择成这个变量
然后在打印的时候这样调用
form3:=Tform3.Create(nil);
try
frreport1.Preview:=form3.frPreview1;
if frreport1.PrepareReport then
begin
frVariables['rq']:=now;//rq就是那个变量
frreport1.ShowReport;
form3.ShowModal;
end;
finally
form3.Free;
form3:=nil;
end;
 
后退
顶部