当前位置: 代码迷 >> VFP >> 报表的域控件溢出时怎么伸展
  详细解决方案

报表的域控件溢出时怎么伸展

热度:6389   发布时间:2013-02-26 00:00:00.0
报表的域控件溢出时如何伸展?
品名规格,长度有长有短,勾选了“溢出时伸展”,好了,看看是怎么伸展的

“枸缘酸他莫昔芬/10mg*100s/上海制药一厂”,宽度最大能打印10个汉字。

按想象应当打印两行:
枸缘酸他莫昔芬/10mg*
100s/上海制药一厂

现在打印成了三行:
枸缘酸他莫昔芬
/10mg*100s/上海制药
一厂

感觉就是:半角字符串不拆分

而我的意向是:一行20个字符,如果正好第20个字符是一个汉字的结束,第21个字符折返;如果正好第20和21个字符是一个汉字,则第20个字符就折返;半角字符按实际的长度折返

------解决方案--------------------------------------------------------
在行中插入换行符?
------解决方案--------------------------------------------------------
设置打印字符串的最大宽度
------解决方案--------------------------------------------------------
1、利用SUBSTRC、LENC之类的 函数,容易出现C0005之类的错误;
2、用SUBSTR、LEN,在程序中判断最后1位是否是汉字、全角,再做处理。
------解决方案--------------------------------------------------------
在主程序中加代码:
Set Procedure To MyProc.prg

MyProg.prg 中加一自定义函数,如下
SQL code
*==============================================================* 功能:将字符串尽量平均分成等长度的子字符串,且不受中文字影响* 参数:tcStr ==> 要做分割的字符串,tnLen ==> 想分成的长度*==============================================================Function CUT_STR    Parameters tcStr,tnLen    tcStr=Alltrim(tcStr)    Local lcRetStr    lcRetStr=''    Do While !Empty(tcStr)        If Between(Asc(Rightc(Left(tcStr,tnLen),1)),128,255)            lcRetStr=lcRetStr+Chr(10)+Left(tcStr,tnLen-1)            tcStr=Substr(tcStr,tnLen)        Else            lcRetStr=lcRetStr+Chr(10)+Left(tcStr,tnLen)            tcStr=Substr(tcStr,tnLen+1)        Endif    Enddo    Return Substr(lcRetStr,2)Endfunc
------解决方案--------------------------------------------------------
(十豆三)
 Return Substr(lcRetStr,2)
是不是闪开前边的换行符?
  相关解决方案