请帮帮忙解决quickreport中qrlabel的中文/英文字母自动换行问题,已升级到quickreport3.06,100分相送 ( 积分: 100 )

  • 主题发起人 主题发起人 亮星星
  • 开始时间 开始时间

亮星星

Unregistered / Unconfirmed
GUEST, unregistred user!
通过浏览以前的帖子,我将quickreport升级到3.06后,中文内容可以实现自动换行,但是英文字母加数字、字符还是不可以实现自动换行,qrlabel.caption的值取自数据库的字段名(字段名中没有空格),我现在在用delphi的translation manager作中英文两个版本,用同一个代码如何实现中英文都可以自动换行呢?谢谢,100分相送
 
通过浏览以前的帖子,我将quickreport升级到3.06后,中文内容可以实现自动换行,但是英文字母加数字、字符还是不可以实现自动换行,qrlabel.caption的值取自数据库的字段名(字段名中没有空格),我现在在用delphi的translation manager作中英文两个版本,用同一个代码如何实现中英文都可以自动换行呢?谢谢,100分相送
 
请楼主允许我订阅!
 
怎么没有人回答呢?二楼的订阅什么?
 
//{分割中文字符串 用于QuickReport中的QRLabel QRDbText 等}
function seprataeStr(str: string;
ii: integer): string;
{分割中文字符串}
var
CutLengthOfLine{ 被处理字符串的总长度 }, j: integer;
sLine{ 被处理的源字符串 }: string;
sCuted{ 按固定长度分割出来的部分字符串 }: string;
iCutLength{ 按固定长度分割出来的部分字符串的长度 }: integer;
bIsDBCS{ 是否是汉字的前半字节 }: boolean;
s:string;
begin
CutLengthOfLine := ii;
if CutLengthOfLine <
2 then
Exit;
sLine := str;
if Length(sLine) = 0 then
s := s+#13+#10
else
repeat //开始处理字符串
iCutLength := CutLengthOfLine;
sCuted := Copy(sLine, 1, iCutLength);//从头取出 iCutLength 长的字符串
bIsDBCS := False;
//先假设没有半个字符串
for j := 1 to iCutLengthdo
//从头到尾逐个检查,至于为什么?
begin
if bIsDBCS then
//如果上一个字节是汉字的前半部分
bIsDBCS := False //则此时本字节是汉字的后半部分,
//所以将是否前半个汉字检测标志设为假
else
if Windows.IsDBCSLeadByte(byte(sCuted[j])) then
bIsDBCS := True;
//否则检查本字节,并根据结果设置标志
end;
//end of for
if bIsDBCS then
Dec(iCutLength);
//如果最后一个字节是汉字的前半部分, 则少截取一个字符,避免乱码
s := s + Copy(sLine, 1, iCutLength) + #13 + #10;
sLine := Copy(sLine, iCutLength + 1, Length(sLine) - iCutLength);
//拷贝出下一部分固定长度的字符串,循环处理
until Length(sLine) <= 0;
Result := s;
end;
 
英文也是一样可以的
 
我不想通过编程实现,前面的帖子中说过将quickreport升级到3.06后,中文内容可以实现自动换行,可是英文却不能,我希望能够不编程实现这个功能
 
接受答案了.
 
后退
顶部