1.我想定义一个函数转换金额大小写,按照下面的方法:
1)、打开FR目录下的fr_Calss.pas文件,然后找到
constructor TfrStdFunctionLibrary.Create
看到一个个系统原带函数名称没? 看到了就依样写上一句 Add('AMTINWORD');
然后往下快到End附近的时候,看到添加入口的语句没?
加上一句
AddFunctionDesc('AMTINWORD', '金额大写', 'AmtInWord( <Number>)/返回金额的中文大写.');
这样到时在报表设计器里面就可以看到 有一个金额大写的分类,里面有AMTINWORD函数。 2)、找到procedure TfrStdFunctionLibrary.DoFunction(FNo: Integer; p1, p2, p3: Variant;
var val: Variant); 过程 在 Case语句里面加上一句,注意,语句的CASE入口“22” 是 上面的 Add('AMTINWORD')的ItemIndex号码,从0开始数数看,是不是22,否则改成正确的。
22: Val := AmtInCnWord(frParser.Calc(p1)); 3)、在FR_Utils.pas单元中添加上下面的函数,函数的内容随便你写了。Function AmtInWord(Num:Double):String;
这样写增加了一个系统函数,但为何在系统函数列表中没显示
2.如何定义一个能计算记录总页数的系统变量,fastreport的总页数要设为2次遍历,我是每页5行,不足补空行,所以不能设2次遍历
只要能解决问题,分不够再加
1)、打开FR目录下的fr_Calss.pas文件,然后找到
constructor TfrStdFunctionLibrary.Create
看到一个个系统原带函数名称没? 看到了就依样写上一句 Add('AMTINWORD');
然后往下快到End附近的时候,看到添加入口的语句没?
加上一句
AddFunctionDesc('AMTINWORD', '金额大写', 'AmtInWord( <Number>)/返回金额的中文大写.');
这样到时在报表设计器里面就可以看到 有一个金额大写的分类,里面有AMTINWORD函数。 2)、找到procedure TfrStdFunctionLibrary.DoFunction(FNo: Integer; p1, p2, p3: Variant;
var val: Variant); 过程 在 Case语句里面加上一句,注意,语句的CASE入口“22” 是 上面的 Add('AMTINWORD')的ItemIndex号码,从0开始数数看,是不是22,否则改成正确的。
22: Val := AmtInCnWord(frParser.Calc(p1)); 3)、在FR_Utils.pas单元中添加上下面的函数,函数的内容随便你写了。Function AmtInWord(Num:Double):String;
这样写增加了一个系统函数,但为何在系统函数列表中没显示
2.如何定义一个能计算记录总页数的系统变量,fastreport的总页数要设为2次遍历,我是每页5行,不足补空行,所以不能设2次遍历
只要能解决问题,分不够再加
解决方案 »
- 我的一个程序运行的之后出现下面的问题
- 如何在编写dll文件中动态的使用组件
- Access远程连接后如何断开
- 如何得到TDBGrid中某一格或者某一列的数据?
- 显示ADOQuery中的数据 完全是为了抛分(要分的就来)
- 用ADO访问Sql Server 2000,为什么客户端机器设置了密码后,再运行我原来的程序,需要先通过网上邻居访问一下服务器才能正确连接,否则会
- 用RAVE开发报表的问题
- 如何避免每次打开Form时,.dfm 文件自动改变
- 我想学DELPHI,求助高手
- 谁知道哪个下载软件的下载速度最快,注意是速度!!!!!
- property 用法
- 同一条赋值语句,要重复使用,能否像定义公共变量一样定义一次就可以不断使用?
现在请大家想想第2个问题吧,主要是在哪些事件中写代码,提供一下思路都行
procedure TfrDBDataSet.Init;
begin
Open;
//////edit
TotalRecNo := FDataSet.RecordCount; //增加这句计算总记录数
//////edit
if (FRangeBegin = rbCurrent) or (FRangeEnd = reCurrent) then
FBook := frGetBook(TfrTDataSet(GetDataSet)) else
FBook := frEmptyBook;
FEof := False;
end;
在ONGetValue事件中控制变量的显示.以下例子供参考;
if frreport1.FinalPass
then
begin
for i:=0 to adock.RecordCount-1 do
begin
if parname='mytotalpage' //mytotalpage自定义的变量
then
begin
{case (adock.FieldByName('databs').AsString)[1] of
'A': sort:=0;
'B': sort:=1;
'D': sort:=2;
'Z': sort:=3;
end;}
if checkbox1.Checked //pages_count函数计算总张数
then count:=pages_count(dm.ado_qry,sort,1,adock.fieldbyname('porder').AsString)
else count:=pages_count(dm.ado_qry,sort,0,adock.fieldbyname'porder').AsString);
frreport1.Dictionary.Variables['mytotalpage']:=inttostr(count);
end;
end;
end;
{以上是多页式连记出库传票,可供参考}