QRDBText折行问题(30分)

  • 主题发起人 主题发起人 Tom_cn
  • 开始时间 开始时间
T

Tom_cn

Unregistered / Unconfirmed
GUEST, unregistred user!
表格中的QRDBText的WordWrap设为True,AutoSize设为False并拖动确定其显示范围,但仍然只显示一行,请问如何解决?谢谢。
 
呵呵,那个自动折行只对英文起作用,我下午来,如果没别的大侠出手,我就试着改一下原码
 
在中间加空格
 
在qrdbtext的onprint事件中,
自己修改value值,用#10,#13换行。
 
Insert(Value,#13,i)
i:the position where you want to insert "#13"(wordwrap)
 
请问如何修改,写在哪里,详细一点好吗?谢谢。
 
连英文也要带空格才行,我需要打印中文,请快帮帮忙。
 
如一个数据'一二三四五六七八',
在onprint时,它的value就是'一二三四五六七八',
你可以在onprint中,
value:=copy(value,1,4)+#10+#13+copy(value,5,4);
value就是'一二三四'+#10+#13+'五六七八',打印时就分为两行了。
如有中英文混合,或有数字,要考虑一下汉字的高低位。
DFW以前的文档中有,
自己写个小函数处理一下吧。
 
在上一行的右侧填写未完转到下一行左侧,即随意截取,并且中间有中英文及数字,仅用copy确实出现乱码,大家可以提供解决的函数吗?
 
放一Memo,设置Memo的宽度与QRDBText相同,字体相同,在打印事件中(onPrint)把Value赋给Memo,利用Memo的换行能力换行,之后将Memo中的Lines再一行一行加到Value上,每行加#13#10,即可:
procedure QRDBTextPrint(sender:TObject;var Value:string);
var
i:integer;
begin
Memo.Lines.Clear;
Memo.Lines.Add(Value);
Value:='';
for i:=0 to Memo.Lines.Count-2do
begin
Value:=Value+Memo.Lines+#13#10
end;
Value:=Value+Memo.Lines;
//最后一行,其后不可加#13#10,否则多一空行
end;
 
在你的qrdbtext的onprint事件中下下列代码,
procedure QRDBText1Print(sender: TObject;
var Value: String);
var bExit : boolean;
iLen : integer;
strSource, strTemp : string;
begin
if Length(Value) <= 58 then
//这个58应该是用你的行的长度除以8得到的,你可 以多试几次,保证折行的准确长度
exit;
strSource := Value;
Value := '';
//防止截断汉字。
while truedo
begin
iLen := 1;
while iLen < 58do
begin
if ord(strSource[iLen]) > 128 then
inc(iLen, 2)
else
inc(iLen);
end;
dec(iLen);

strTemp := Copy(strSource, 1, iLen);
//加回车。
if Value = '' then
Value := strTemp
else
Value := Value + #13 + strTemp;
strSource := Copy(strSource, iLen + 1, Length(strSource) - iLen);
if Length(strSource) <= 82 then
begin
Value := Value + #13 + strSource;
exit;
end;
end;
end;
 
感谢大家的函数。这些是在一个“矩形框内”折行,我又有了新麻烦,把一条内容分写在两条横线上,用两个QRLabel,从数据库中提取数据,就像copy(str,1,i);然后copy(str,i+1,j);但中英文混写不行有乱码。我需要任意选长度截取其中一部分,请大家帮忙,谢谢。
 
考虑汉字的高低位问题啊。。。
 
请详细介绍一下好吗?
 
to lichaogang:
按你的方法,换行时,行与行之间都多出一空行。不知何因?
 
那么你就去掉最后的#13#10(上面我写的代码不是每一行都加了#13#10吗),可能是我忘记了,Memo在换行后已经自动加了。
试下先!
 
后退
顶部