FastReport3.23.9中文自动折行问题?(50分)

  • 主题发起人 主题发起人 sanqou
  • 开始时间 开始时间
S

sanqou

Unregistered / Unconfirmed
GUEST, unregistred user!
FastReport3.23.9中的TfrxMemoView显示时,中文自动折行,有缺字的现象(没有乱码),不知大侠如何解决些问题?
 
我一般是自己手动折行,提供我的一个函数给你,
function strWrap(const ostr:string;
const mint:integer):string;
var
loopin,nextin,linein,stepin :integer;
tempst :string;
begin
{字符串折行}
tempst := '';
nextin := length(ostr);
loopin := 1;
linein := 0;
if(mint > 0) then
while (loopin <= nextin)do
begin
stepin := 1+integer(ByteType(ostr, loopin) <> mbSingleByte);
linein := linein +stepin;
if(ostr[loopin] = #13)
or(ostr[loopin] = #10) then
begin
linein := 0;
end else
if(linein > mint) then
begin
tempst := tempst +#13#10;
linein := 0;
end;
tempst := tempst +copy(ostr, loopin, stepin);
loopin := loopin +stepin;
end;
case (tempst='') of
true: result := oStr;
else
result := tempst;
end;
end;
 
这个问题,大家硬是没有办法了吗?
 
用上面的Fun基本就可以解决啦,下面这个也行,而且可以处理行末标点问题:
function strWrap1(const ostr: widestring;
const mint: integer): string;
var
i: integer;
nstr, tmp: widestring;
tmpstr, tmps: string;
function isbd(tmp: widestring): boolean;
begin
if pos(tmp, ', 。 ;') > 0 then
result := true
else
result := false;
end;
begin
nstr := '';
tmpstr := '';
for i := 1 to length(ostr)do
begin
tmp := copy(ostr, i, 1);
if (tmp = #10) or (tmp = #13) then
continue;
tmps := tmp;
if (length(tmpstr) >= mint - 1) then
begin
if (length(tmpstr) = mint - 1) and (length(tmps) = 1) then
begin
nstr := nstr + tmp + #13#10;
tmpstr:='';
end else
begin
tmpstr := tmp;
if isbd(tmp) then
begin
nstr := nstr + tmp + #13#10;
tmpstr := '';
end else
nstr := nstr + #13#10 + tmp;
end;
end else
begin
tmpstr := tmpstr + tmp;
nstr := nstr + tmp;
end;
end;
result := nstr;
end;
 
用FR本身的折行,我倒是没有遇到过缺字的现象
 
http://www.2ccc.com/article.asp?articleid=2619
 
重新在DELPHI园地上下载了一个安装后,可以了,折行没有问题。
但不知如何汉化,我按说明安装了几遍都是英文。
 
我用的函数
function TNeuReportObject.AddSpace(var s: string;
i: integer): String;
var
k: Integer;
begin
for k := (length(s) div i)do
wnto 1do
begin
if ByteType(s, i * k - 1) = mbLeadByte then
insert(#10#13, s, i * k - 1)
else
insert(#10#13, s, i * k);
end;
result := s;
end;
 
我在DELPHI园地中下载了一个FastReport3.23.9,按说明安装成功后,没有此现象了。但也要谢谢你们。
 
后退
顶部