不要用QrDBText,用QrMemo很好用! function divStr(Tmpstr:string; tmpInt:integer):TstringList; var i,j,k:integer; somelist:TStringList; begin for i := 1 to (length(tmpstr) div tmpInt+1) do //如果最后为汉字后半部分,那么i*tmpInt,否则i*tmpInt-1,以避免半个字符的出现 begin k := 0; for j := 1 to i*tmpInt do if j <= length(tmpstr) then if ord(tmpstr[j]) > 126 then k := k+1; if (k mod 2 = 0) then insert(#13#10,tmpstr,i*tmpInt-1) else insert(#13#10,tmpstr,i*tmpInt); end; somelist:=TStringList.Create; //somelist.Clear; somelist.Add(tmpstr); result:=somelist; end; ……QRMemo1.Lines.Clear; QRMemo1.Lines:=divStr(DbEdit1.Text,24);
QrDBtext的AUTOStretch设为True
AutoSize设为TrueOK!?
1、QrDBtext的AUTOStretch设为True,但AutoSize要设为FALSE。2、如果是中文,那么就需要在字符串里添加空格。在QR中,按照英文的书写习惯换行的,即一个单词不切为两行。那么对于中文而言就需要如下处理,如:打印“竟发现伏明霞裤子上的满满的英文竟然全是不雅文字”,你想每行最多20个字符,那么就需要如下切割:“竟发现伏明霞裤子上的 满满的英文竟然全是不 雅文字”。注意:如果你的字符串里面可能中英文、数字字母混合,需要用IsDBCSLeadByte来判断是否切了半个汉字。
autostretch:true
autosize:false
wordwrap :true
就可以自动换行了!
function divStr(Tmpstr:string; tmpInt:integer):TstringList;
var
i,j,k:integer;
somelist:TStringList;
begin
for i := 1 to (length(tmpstr) div tmpInt+1) do
//如果最后为汉字后半部分,那么i*tmpInt,否则i*tmpInt-1,以避免半个字符的出现
begin
k := 0;
for j := 1 to i*tmpInt do
if j <= length(tmpstr) then
if ord(tmpstr[j]) > 126 then k := k+1;
if (k mod 2 = 0)
then insert(#13#10,tmpstr,i*tmpInt-1)
else insert(#13#10,tmpstr,i*tmpInt);
end;
somelist:=TStringList.Create;
//somelist.Clear;
somelist.Add(tmpstr);
result:=somelist;
end;
……QRMemo1.Lines.Clear;
QRMemo1.Lines:=divStr(DbEdit1.Text,24);