我单位购买了一个小型管理信息系统,其中报表是用fastreport2.5做的,报表设计可使用fastScript.在使用报表过程中,由于工作的要求,需要将其总金额转换为大小写,并显示。于是我先在“细项脚”空白处画一memo框,将在“细项脚”的OnbeforePrint事件中增加如下语句:
    memo25.Lines.Clear;
    memo25.add(dx_str);//dx_str是转换后的大写金额
    可是打印预览时,memo25框的内容并没有变化。其中转换算法是正确的,在delphi中在正常结果输出。memo25框的readonly属性是false,visible属性是true,memo25的填充颜色和visible属性可用代码改变,并在预览时也产生了相应变化。
   我改用如下语句:
   memo25.Lines.Clear;
    memo25.add('hello');
   在预览时,memo25框的文字仍然没有变化。
   另外,我想用最新版本的fastreport覆盖fastreport2.5,可是该管理系统在编译时采用打包的方式,安装后除图片和数据库外才几个文件,找不到和fastreport相关的文件。因为没有该系统源程序,此系统也不能重新编译。
   另外,又分别尝试了如下语句:
  (1)memo25.text:='hello';
  (2)memo25.lines[1]:='hello'
    预览时依然没有变化。
    已经一个星期了,仍然没有解决,目前山穷水尽,请高手出手相助!  

解决方案 »

  1.   

    在“细项脚”空白处“Insert rectangle object”,设变量名为f不要在脚本中赋值,可以在调用预览或打印前,
    在程序中,给变量f赋值: frVariables['f']:='hello'
      

  2.   

    请问ali30,在何处设置变量f?
       因为"Insert rectangle object"后在“细项脚”空白插入一个memo25框,然后弹出一文本编辑器,该编辑器上方是一排按钮,这些按钮和设置变量是没有关系的。中间框是用于设置其显示内容的,下方框在begin  end ,可能用于设置一些代码的。 
      在“数据字典”处设置了一个变量,却不知如何和memo25框联系起来。
      因为不是该系统的开发者,所以没有源程序,所以"在程序中,给变量f赋值:"是做不到的。
      另外,我所在的是相当二次开发,不在脚本中设置,又怎可以实现我的功能呢?
      请ali30和其他高手继续指教?
      我的QQ:172418377
      

  3.   

    回复 chenylin(陈SIR) :
         在“数据字典”处设置了一个变量,如何和memo25框联系起来?
      

  4.   

    在“数据字典”处设置了一个变量的顺序是:1、新建目录;2、新建变量;
    如果已增加变量"AAA",那么双击打开memo25, 1、可以在空白处直接加上[AAA],或者点击“插入表达式”按钮进行选择;
      

  5.   

    回复 chenylin(陈SIR):
        按你的提示,增加了变量,并且memo25框的空白处通过“插入表达式”插入了[AAA],然后在"细项脚"的OnBeforePrint事件中增加了如下语句:
       
       frVariables['f']:='hello';
       预览时memo25仍然没有变化。
      

  6.   

    frReport1.FindObject('Memo25').Memo.Text :=dx_str;
      

  7.   

    回复hqhhh(枫叶) :奇怪,脚本语法检查通不过
       将
      frReport1.FindObject('Memo25').Memo.Text :=dx_str;
       放至OnBeforePrint的脚本后,确认保存时fastreport进行语法检查,出现如下错误提示:
        Need ";" or "end" here.
       莫名其妙,此处并不需要";"或"end"呵.
       去掉此句,却又可以正常保存,只是预览时没有结果。
      

  8.   

    1、创建变量:AAA;
    2、在OnBeforePrint中写程序:AAA:=dx_str;
    3、双击打开Memo25,在Begin...end中写程序:、
       Memo25.Memo:=AAA;
    另外,我不清楚你的dx_str是如何来的?如果来源没有问题,上面的方法一定可以。如果dx_str是在Fastreport中定义的变量,那么可以省去第二步,直接:Memo25.Memo:=dx_str;
    如果该dx_str是原来程序中的变量,那就很困难了,你还不如把大写函数写在Fastreport。
      

  9.   

    我遇到你说的那个问题,主要是每个 Memo 都有一个显示的索引号,还有不同的 Band 也有的,你的语句必需放到那个 Memo25 显示之前执行才可以呀!有一种方法就是在 报表设置 中选择 两遍报表,应该也可以的!你如果有什么不明白的话,可以跟我联系: 邮箱:[email protected],QQ:26491405
      

  10.   

    回复chenylin(陈SIR):
        (1)dx_str是我在OnBeforePrint事件中转换结果,是一字符串,由数字的中文大写所组成,如"零壹贰叁肆伍"之类。
        (2)尝试了Memo25.Memo:=dx_str;和Memo25.Memo.text:=dx_str;也是预览时没结果。
      

  11.   

    在打印事件之前写下面的代码:
    如:
    frReport1.FindObject('Memo25').Memo.Text :=dx_str;
    frReport1.ShowReport;
      

  12.   

    如果不行,请主先试试
    frReport1.FindObject('Memo25').Memo.Text :='零壹贰叁肆伍';先看看可不可以正常显示!
      

  13.   

    在wjwboy(王建)的大力帮助下,通过QQ,终于解决,为了让其他朋友少走一段弯路,特公布结果如下 :
       双击memo25框,在上面随便输入一个字符,如A,下面的begin end中加入如下代码:
        memo25.clear;        
        Memo25.lines[0] := dx_str;
       为严格起见,可如下:
         if dx_str = null then
           dx_str := 'Null';
        memo25.clear;        
        Memo25.lines[0] := dx_str; 
       这样就可以在fastscript中实现对memo框修改了,而不是在源程序中修改。因为源代码我们得不到,得到的只是可执行文件。修改报表只能在开发单位提供的报表的基础上修改了。    再次感谢关心此贴的朋友们!!!
      

  14.   

    在wjwboy(王建)的大力帮助下,通过QQ,终于解决,为了让其他朋友少走一段弯路,特公布结果如下 :
       双击memo25框,在上面随便输入一个字符,如A,下面的begin end中加入如下代码:
        memo25.clear;        
        Memo25.lines[0] := dx_str;
       为严格起见,可如下:
         if dx_str = null then
           dx_str := 'Null';
        memo25.clear;        
        Memo25.lines[0] := dx_str; 
       这样就可以在fastscript中实现对memo框修改了,而不是在源程序中修改。因为源代码我们得不到,得到的只是可执行文件。修改报表只能在开发单位提供的报表的基础上修改了。    再次感谢关心此贴的朋友们!!!