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

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
N

ntjrr

Unregistered / Unconfirmed
GUEST, unregistred user!
注,小写转大写函数我已经有了,现在要求就是如何在FR3中调用这一函数,并且如何应用,大写金额等于是要转换本页中的一个MEMO的内容(这个MEMO就是显示的小数)
 
[STRTORMB([ADOQuery1."Money"])]
你看这样对吗?
 
关键是这个STRTORMB如何加到FR3中去
 
主程序中的转换函数是function Tprintform.Currency(rmb:do
uble): string;
那么在function Tprintform.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;如何将上面的函数加进去呢
 
procedure TFrom1.frReport1UserFunction(const Name: String;
p1, p2,
p3: Variant;
var Val: Variant);
begin
if Name = 你的大写转小写函数名 then
...
end;

你的大写转小写函数名(je) 在打印设计方案里用就行了
 
我的版本中没有P1P2这样的东西,我的是这样的:function Tprintform.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if MethodName = 'Currency' then
Result := Currency(Params[0]);
end;
但好象写得不对,不好调用
 
procedure Memo38OnBeforePrint(Sender: TfrxComponent);
begin
Memo38.Text :=Currency(memo20.text);
end;
提示为真实变量太多
 
Memo38.Text :=Currency(50);
然后跟踪看Params[0]是什么;
if MethodName = 'Currency' then
Result := Currency(VarAsType(Params[0], varDouble));
 
还是提示真实变量太多
 
如果写成 memo9.text:=Currency;试一下,就提示类型不兼容strign,extended
 
我是这样处理的:用一个过渡表中的一个字段保留转换后的大写金额,调用报表之前先删除表中的记录,然后你将大写金额写入。报表只要把这个字段读出来就可以了,不用在报表中转换。
 
你跟踪以下FR_Pars单元,看看参数值是不是取对
 
doud2006前辈,不知道您用的是FR什么版本,我的是3.03,不知道您是否有空做一个自定义函数的例子?因为我对跟踪那个值还不懂如何操作法
 
呵呵,别客气,我的2.4,不知和3。03差别大不大,在FR_Pars单元CalcOPZ方法,你可以参考以下'COPY'的实现,看看你的参数他解析的对吗?
 
修改一下源代码,直接变成fr的内置函数
 
不知道在fr3中如何改呢?主要是在这一段中如何写才对:function Tprintform.frxReport1UserFunction(const MethodName: String;
 
下了个3,好像是这么用
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if UpperCase(MethodName) = UpperCase('MyFunction') then
Result := 'Test' + Params[0];
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
frxReport1.AddFunction('function MyFunction(s: String): String');
frxReport1.ShowReport;
end;
 
试了一下,还是提示真实变量太多,另外 Result := 'Test' + Params[0];中的test产生什么作用?
 
后退
顶部