用frPrintTable打印数据时,遇到长的字段如何让他在规定字数范围内换行???(50分)

  • 主题发起人 主题发起人 cb1997
  • 开始时间 开始时间
C

cb1997

Unregistered / Unconfirmed
GUEST, unregistred user!
用frPrintTable打印数据时,遇到长的字段如何让他在规定字数范围内换行???
好急啊!!
 
{此函数在给定一个中英文字符串后,按给定的截止长度进行修正}
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;
 
http://expert.csdn.net/Expert/topic/1354/1354136.xml?temp=.4455835
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部