回车符的ASCII 是多少?
在这个帖子里http://www.csdn.net/expert/topic/307/307022.shtm 我提了自动折行的问题,照NetColorWolf(NCW)所说 的函数f_cr(bz, long(describe('compute_bz.width')))(考虑一大段文字没有空格情况下),而实际情况是又有空格又有回车符。我改了一点,就是非到指定的长度,忽略空格,但我不知道回车的 ASCII,所以……,望告之,多谢!
********************************8
对于没有加空格或者回车的列:可以这样处理
在SQL中选中该列,在DW painter中将该列(比如叫bz)删除,加入一计算列(比如叫compute_bz)代替原来的列,此计算列的表达式为:
f_cr(bz, long(describe('compute_bz.width')))
然后设置此计算列的Autosize Height为true(也就是取消此复选框),设置DW的detail带Autosize Height为true
然后,就没有了。对了,这儿是我写的函数(必须是全局的)string f_cr(string as_text, integer ai_w)
代码参考如下:
///////////////////////////////////
//为报表中汉字自动换行提供回车
///////////////////////////////////
long i, j, ll_count, ll_len, ll_pos
string ls_ret, ls_line
ll_pos = 1
//取一行所能容纳的字符数(宋体,9号)
ll_len = ai_w / 30 //(我是宋体,12号,取值40)
//估算需要的行数
ll_count = len(as_text) / ll_len + 1
for i = 1 to ll_count
//得到一行的字符
ls_line = mid(as_text, ll_pos, ll_len)
//返回一行中倒序非汉字的位置或者空格的位置,回车???
for j = ll_len to 1 step -1
if asc(mid(ls_line, j, 1)) < 128 or asc(mid(ls_line, j, 1))=3 &
then exit
next
//如果为半个汉字,就加一个字符
if mod(ll_len - j, 2) = 0 then
ls_ret += mid(as_text, ll_pos, ll_len) + '~r'
ll_pos += ll_len
else
ls_ret += mid(as_text, ll_pos, ll_len + 1) + '~r'
ll_pos += ll_len + 1
end if
next
return ls_ret
还有个问题,即使设置了计算列的Autosize Height为true,还是要手工设置多长才是多长。