qrdbtext预览不换行(50分)

S

seagal

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi6+quickreport作报表,有的字段需要折行显示,但qrdbtext预览不换行.
wordwrap:=true;autosize:=false;autostrch:=false/true都不行
怎样换行呢。急
 
//qrdbtext不但预览不换行,如果没有正确处理时打印时也不换行。
//我总是用QRlabel代替它。
{此函数在给定一个中英文字符串后,按给定的截止长度进行修正}
function GetStopPoint(tmpstr: string;
ecount: integer): integer;
var
strlen :integer;
coun,i :integer;
begin
//非法输入时退出
if (tmpstr='') or (ecount<1) then
begin
result:=length(tmpstr);
exit;
end;

strlen:=length(tmpstr);
result:=strlen;
if ecount<strlen then
begin
i:=1;
while i<=ecountdo
begin
coun:=i;
if IsDBCSLeadByte(byte(tmpstr)) then
i:=i+2 else
i:=i+1;
end;
//判断所设定的截止长度是否在一个汉字的前半部,是的话返回(长度-1)的值
if (i-coun=2) and (coun=ecount) then
result:=ecount-1 else
result:=ecount;
end;
if result<1 then
result:=strlen;
end;

{此函数将给定的字符串按规定的长度加上空格,然后就能在Qrlabel中自动换行了}
procedure StrWordWrap(var instr: string;
coun: integer);
var
i,j :Integer;
tmpstr :String;
leftstr :String;
begin
if instr='' then
exit;
//下面的循环先去掉给定的字符串中的空格(怕已有空格影响换行)
tmpstr:='';
for i:=1 to length(instr)do
begin
if instr<>' ' then
tmpstr:=tmpstr+instr;
end;
leftstr:=tmpstr;
tmpstr:='';
i:=length(instr);
while i>coundo
begin
j:=getstoppoint(leftstr,coun);
tmpstr:=tmpstr+copy(leftstr,1,j)+' ';
leftstr:=copy(leftstr,j+1,length(leftstr)-j);
i:=length(leftstr);
end;
tmpstr:=tmpstr+leftstr;
instr:=tmpstr;
end;

{在DetailBand上放一个Qrlabel来显示所需换行字段的值 }
{注意AutoSize:=false;
WordWrap:=True;
将Qrlabel拉到需要的长度和高度}
procedure DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
var
tmpstr:string;
i :Integer;
begin
i:=40;//你需要的换行的长度,也可以用QrLabel的显示长度和字体自动判断
tmpstr:=query1.Fields[*].Value;
//想用QrLabel显示的字段的值
zyhpro.StrWordWrap(tmpstr,i);
qrlabel1.Caption:=tmpstr;
end;
 
也能换,条件是遇到空格。但有个问题,换行后,可能会串到下一行,
怎样能使,边框也随着动态的变呢
 

Similar threads

D
回复
0
查看
710
DelphiTeacher的专栏
D
D
回复
0
查看
734
DelphiTeacher的专栏
D
D
回复
0
查看
583
DelphiTeacher的专栏
D
D
回复
0
查看
828
DelphiTeacher的专栏
D
D
回复
0
查看
632
DelphiTeacher的专栏
D
顶部