换行问题(100分)

  • 主题发起人 主题发起人 zhfhq
  • 开始时间 开始时间
Z

zhfhq

Unregistered / Unconfirmed
GUEST, unregistred user!
quickreport似乎不支持中文换行,本人已将其TQRDBText控件的wordwrap属性设为true,还是不起作用;
麻烦哪位大虾帮忙解决一下这个问题。
 
我没遇到,帮你顶吧
 
用3.62以上版本,在你要换行的地方加个空格就行啦
如: '中华人民共和国 aaaaaa'
中华人民共和国
aaaaaa
 
呵呵呵,有没有不加空格就能解决的方法。
 
因为ontime事件执行代码较多,出现代码重入,也就是还没有执行完,有触发了ontime事件。
begin
timer1.enabled:=false;
...
timer1.enabled:=true;
end;
 
對這些要其換行的,我經常是用qrrichtext然後自己賦值給它
我試過多次了都無法實現換行
 
处理qrlabel的onprint 事件:
const
MAXLEN=40;
var
i_ins,i,j:integer;
begin
i_ins:=0;
j:=length(value) div MAXLEN;
for i:=1 to jdo
begin
if Windows.IsDBCSLeadByte(byte(value[i*MAXLEN-1+i_ins])) and Windows.IsDBCSLeadByte(byte(value[i*MAXLEN+i_ins])) then
begin
insert(#13,value,i*MAXLEN+1+i_ins);
inc(i_ins);
end
else
begin
insert(#13,value,i*MAXLEN+i_ins);
inc(i_ins);
end;
end;

以上代码有点问题,当一行中出现奇数个非汉字字符时会计算错误,你可以自己改一下。
 
显示的最大宽度可不可以按照指定的QRLabel的宽度自动获得
 
可以啊,修改maxlen的值为
tqrlabel(sender).width div abs(tqrlabel(sender).font.height)
这样可能不太好,有个以前的换行方法,我找找。。
 
var
str: widestring;
nowstr: string;
i: integer;
begin
self.Font := TQRLabel(sender).Font;
str := Value;
Value := '';
nowstr := '';
for i := 1 to length(str)do
begin
if Canvas.TextWidth(nowstr + str) > TQRLabel(sender).Width then
begin
nowstr := '';
Value := Value + #13;
nowstr := nowstr + str;
Value := Value + str;
end
else
begin
nowstr := nowstr + str;
Value := Value + str;
end;
end;

试试这个
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1848649
像这样的问题请先用全文检索搜一下,如果找不到答案再提问。
 
呵呵呵呵,还有,存在半字符的问题,这种怎么解决呀
 
不是和你说了,以上代码有点问题,当一行中出现奇数个非汉字字符时会计算错误,就是出现半个字符,你可以自己改一下,方法嘛,你看我的代码还不会吗?计算非汉字字符的个数,然后。。。。
 
还有个省事的办法,你用quickreport 3.06版就行了。
 
接受答案了.
 
后退
顶部