大家共同来解决fastreport换行少汉字的bug ( 积分: 50 )

  • 主题发起人 主题发起人 蜉蝣小生
  • 开始时间 开始时间

蜉蝣小生

Unregistered / Unconfirmed
GUEST, unregistred user!
用过qreport后才知道用fastreport是多么的灵活和方便,现在fastreport给我个人最大的麻烦就是换行最后一个汉字丢失的问题,最近一直都在头疼这个问题,在网上找了N个解决方法,可是都好用.以前用3.0版本的时候就没有这个问题,可是3.0导出导PDF的时候总是这样那样的错误,现在我用的是3.23.9这个版本,PDF这个问题解决了(虽然不理想),可是换行这个问题又出来了,最近听说4.0好像也有这个问题.......
我想到一个解决办法: 在窗体上面放一个Tmemo控件,长度和报表上对应的memo的长度一样,在报表的DetailData1OnBeforePrint(Sender: TfrxComponent);事件中把对应字段的值str:=<frxDBDataset2.&quot;备注&quot;>;返回给窗体上的Tmemo,然后把Tmemo的各行值一行一行的再返回到报表上的memo里面.
可是由于我对报表和界面之间变量传递不是很清楚,尤其是怎么再DetailData1OnBeforePrint(Sender: TfrxComponent);里面把str:=<frxDBDataset2.&quot;备注&quot;>;返回到Tmemo里面
 
在论坛找到下面的函数,说可以解决,可是这个函数在哪个地方调用?
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;
 
后退
顶部