{此函数在给定一个中英文字符串后,按给定的截止长度进行修正}
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;