在Fastreport中如何在打印前获得某一字段能打印的最大字数?
由于特殊要求需要对超出范围的字进行换行处理。
如下面表格样式:---------------------------------------
| No| 地址  |      内容         | 说明|
---------------------------------------
| 1 | 上海  | 相关要打印的内容  |     |
---------------------------------------
| 2 |       | 这行要打印的内容  |     |
|   | 徐汇  | 超出了最大打印字  |     |
|   |       | 数,Fastreport自动 |     |
|   |       | 换行成这个样式。  |     |
---------------------------------------
| 3 |其他区 | 相关操作-2        |     |
---------------------------------------由于对样式要求严格不允许出现上面的换行形式,需要产生下面的样式。
中间第2行内容产生4行,而不能在一行中。---------------------------------------
| No| 地址  |      内容         | 说明|
---------------------------------------
| 1 | 上海  | 相关要打印的内容  |     |
---------------------------------------
| 2 | 徐汇  | 这行要打印的内容  |     |
---------------------------------------
|   |       | 超出了最大打印字  |     |
---------------------------------------
|   |       | 数,Fastreport自动 |     |
---------------------------------------
|   |       | 换行成这个样式。  |     |
---------------------------------------
| 3 |其他区 | 相关操作-2        |     |
---------------------------------------本人比较愚钝的做法是,先获取[内容]字段能打印的最大字数。打印前先分隔好,再输出到fastreport中。现在的问题是,[内容]字段可能会改变字体,如果把最大字数固定下来就会出现麻烦。所以打印前先从fastreport中获取这个字段的最大字数,再分割打印输出。
用什么方法才能获取这个打印的最大打印字数?或是有其他什么方法能处理这个换行问题都可以!

解决方案 »

  1.   

    不要考虑在fastreport中实现了,不写代码无法解决这个问题.
    我以前也是采用类似你的方法解决.
      

  2.   

    我也觉得要先处理,FAST实现不了
      

  3.   

    预览之前吗?
    给你的memo加个事件:
    procedure MemoStartPriceOnBeforePrint(Sender: TfrxComponent);
    begin
      showmessage(length(MemoStartPrice.Text)); 
    end;
      

  4.   

    to:
    iuIRCClient(我是老鹰)首先,谢谢你! 不过你的答案和我想要的有些出入,是我米说明白。不是想要这个数据字段的文本长度,想要这个字段在报表中,一行内最多能打印多少字数的长度。报表的字段的字体改变会对一行内最多容纳的字也会随之改变,所以想在打印前先获得能显示的最多字数。
    比如: 下面表格样式情况下,字段[内容]在一行内最多能打印多少字。
    下面的表格样式显示,[内容]字段在一行内最多能打印17个字符。根据行最大打印数,处理换行问题。
    关于字符的全/半角很容易处理,所以只要知道一行内能容纳多少字数就可以了。
    ---------------------------------------
    | No| 地址  |      内容         | 说明|
    ---------------------------------------
    | 1 | 上海  | 相关要打印的内容  |     |
    ---------------------------------------
    | 2 | 徐汇  | 这行要打印的内容  |     |
    ---------------------------------------
    |   |       | 超出了最大打印字  |     |
    ---------------------------------------
    |   |       | 数,Fastreport自动 |     |
    ---------------------------------------
    |   |       | 换行成这个样式。  |     |
    ---------------------------------------
    | 3 |其他区 | 相关操作-2        |     |
    ---------------------------------------
      

  5.   

    可以解决,我只给你方案
    在打印之前,你可以取到这个memo的宽度,当然你要想办法转换成像素(默认的好像是厘米)
    然后,你根据当前字体设置情况算出内容的长度,两个值比较可以得出什么时候该换行。不过这个有些麻烦,我现在找不到可供参考的代码了。