在FastReport3中怎样才能实现人民币大写?
如何加入自定义函数??function TJzpzEdit1.MoneyCn(mmje: Double): string;
const
  s1: string = '零壹贰叁肆伍陆柒捌玖';
  s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';  function StrTran(const S, s1, s2: string): string;
  begin
    Result := StringReplace(S, s1, s2, [rfReplaceAll]);
  end;
var
  S, dx: string;
  i, Len: Integer;
begin
  if mmje < 0 then
  begin
    dx := '负';
    mmje := -mmje;
  end;
  S := Format('%.0f', [mmje * 100]);
  Len := Length(S);
  for i := 1 to Len do
    dx := dx + Copy(s1, (Ord(S[i]) - Ord('0')) * 2 + 1, 2) + Copy(s2, (Len - i)
      * 2 + 1, 2);
  dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰',
    '零'),
    '零拾', '零'), '零角', '零'), '零分', '整');
  dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零',
    '零'),
    '零亿', '亿'), '零万', '万'), '零元', '元');
  if dx = '整' then
    Result := '零元整'
  else
    Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
end;这样的方式加入
function TJzpzEdit1.frxReport1UserFunction(const MethodName: string;
  var Params: Variant): Variant;
begin
  if MethodName = 'MONEYCN' then
    Result := MoneyCn(Params[0]);
end;运行时出现'MoneyCn'标识未宣告.

解决方案 »

  1.   

    出现下列的错误
    Could not convert variant of type (Array Variant) into type (Double)
      

  2.   

    这样不行,具体参考FastReport的开发手册,上面有详细的写自定义函数的方法,而不是你上面这样。
      

  3.   

    可以直接把函数写到FastReport里面,它支持pascal语法的。这个完全可以实现。
      

  4.   

    控件版本是:FastReport 3.23.12 Enterpise for d2006 (DeXter)
    我自己查资料,问题已经解决,正确设置如下:
    function TJzpzEdit1.MoneyCn(mmje: Double): string;
    const
      s1: string = '零壹贰叁肆伍陆柒捌玖';
      s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';  function StrTran(const S, s1, s2: string): string;
      begin
        Result := StringReplace(S, s1, s2, [rfReplaceAll]);
      end;
    var
      S, dx: string;
      i, Len: Integer;
    begin
      if mmje < 0 then
      begin
        dx := '负';
        mmje := -mmje;
      end;
      S := Format('%.0f', [mmje * 100]);
      Len := Length(S);
      for i := 1 to Len do
        dx := dx + Copy(s1, (Ord(S[i]) - Ord('0')) * 2 + 1, 2) + Copy(s2, (Len - i)
          * 2 + 1, 2);
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰',
        '零'),
        '零拾', '零'), '零角', '零'), '零分', '整');
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零',
        '零'),
        '零亿', '亿'), '零万', '万'), '零元', '元');
      if dx = '整' then
        Result := '零元整'
      else
        Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
    end;
    //////////
    procedure TJzpzEdit1.FormCreate(Sender: TObject);
    begin
      frxReport1.AddFunction('function MoneyCn(mmje: Double): String;','Myfunction','小写金额转大写的函数');
    end;
    //////////
    function TJzpzEdit1.frxReport1UserFunction(const MethodName: string;
      var Params: Variant): Variant;
    begin
      if UpperCase(MethodName) = UpperCase('MoneyCn') then
        Result := MoneyCn(Params[0]);
    end;
    //////////
    报表中调用方法
    MoneyCn(50000000)
      

  5.   

    function UpperMoney(small:real):string;
    var
       SmallMonth,BigMonth:string;
       wei1,qianwei1:string[2];
       qianwei,dianweizhi,qian:integer;
       ObjSmall:real;
    begin
       {------- 修改参数令值更精确 -------}
       ObjSmall:=Abs(small);
       qianwei:=-2;{小数点后的位置,需要的话也可以改动-2值}
       Smallmonth:=formatfloat('0.00',ObjSmall);{转换成货币形式,需要的话小数点后加多几个零}
       {---------------------------------}
       dianweizhi :=pos('.',Smallmonth);{小数点的位置}
       for qian:=length(Smallmonth) downto 1 do{循环小写货币的每一位,从小写的右边位置到左边}
       begin
          if qian<>dianweizhi then{如果读到的不是小数点就继续}
             begin
                case strtoint(copy(Smallmonth,qian,1)) of{位置上的数转换成大写}
                1:wei1:='壹';
                2:wei1:='贰';
                3:wei1:='叁';
                4:wei1:='肆';
                5:wei1:='伍';
                6:wei1:='陆';
                7:wei1:='柒';
                8:wei1:='捌';
                9:wei1:='玖';
                0:wei1:='零';
                end;
                case qianwei of{判断大写位置,可以继续增大到real类型的最大值}
                -3:qianwei1:='厘';
                -2:qianwei1:='分';
                -1:qianwei1:='角';
                0 :qianwei1:='元';
                1 :qianwei1:='拾';
                2 :qianwei1:='佰';
                3 :qianwei1:='千';
                4 :qianwei1:='万';
                5 :qianwei1:='拾';
                6 :qianwei1:='佰';
                7 :qianwei1:='千';
                8 :qianwei1:='亿';
                9 :qianwei1:='十';
                10:qianwei1:='佰';
                11:qianwei1:='千';
                end;
                inc(qianwei);
                if Small<0 then
                   BigMonth :='负'+wei1+qianwei1+BigMonth {组合成大写金额}
                else
                   BigMonth :=wei1+qianwei1+BigMonth {组合成大写金额}
             end;
       end;
       Result:=BigMonth;
    end