本人已解决fastreport的中文折行问题!(0分)

  • 主题发起人 主题发起人 叶枫
  • 开始时间 开始时间

叶枫

Unregistered / Unconfirmed
GUEST, unregistred user!
本人已解决fastreport的中文折行问题!要代码的请出声,30分一份。呵呵,不是很贵吧!
 
呵呵!来一份!货到发分!
byflyer@163.net
 
byflyer, 已经发过去了,快点给分!
 
我也要一份
mailto:zhulin@163.net
 
to 叶枫:
为减少水贴,我出300分,你在这里公布代码吧,别人就不要再另外发帖子了。
如何?当然价格还可以商量。货到发款,呵呵~~
谢谢!
 
好的!
主要是改动了这个函数:
procedure WrapLine(const s: String);
var
i, cur, beg, last, LoopPos: Integer;
WasBreak, CRLF: Boolean;
begin
CRLF := False;
LoopPos := 0;
for i := 1 to Length(s)do
if s in [#10, #13] then
begin
CRLF := True;
break;
end;
last := 1;
beg := 1;
if not CRLF and ((Length(s) <= 1) or (WCanvas.TextWidth(s) <= maxwidth)) then
OutLine(s + #1)
else
begin
cur := 1;
while cur <= Length(s)do
begin
if s[cur] in [#10, #13] then
begin
OutLine(Copy(s, beg, cur - beg) + #1);
while (cur < Length(s)) and (s[cur] in [#10, #13])do
Inc(cur);
beg := cur;
last := beg;
if s[cur] in [#13, #10] then
Exit else
continue;
end;
if s[cur] <> ' ' then
if WCanvas.TextWidth(Copy(s, beg, cur - beg + 1)) > maxwidth then
begin
WasBreak := False;
if (Flags and flWordBreak) <> 0 then
begin
i := cur;
while (i <= Length(s)) and not (s in spaces)do
Inc(i);
b := BreakWord(Copy(s, last + 1, i - last - 1));
if Length(b) > 0 then
begin
i := 1;
cur := last;
while (i <= Length(b)) and (WCanvas.TextWidth(Copy(s, beg, last - beg + 1 + Ord(b)) ) <= maxwidth)do
begin
WasBreak := True;
cur := last + Ord(b);
Inc(i);
end;
last := cur;
end;
end
else
if last = beg then
last := cur;
if WasBreak then
begin
if ByteType(s,last) = mbLeadByte then
//Tian 2001.03
begin
OutLine(Copy(s, beg, last - beg ));
end
else
If ByteType(s,last) = mbSingleByte then
begin
OutLine(Copy(s, beg, last - beg + 1));
end
else
If ByteType(s,last) =mbTrailByte then
begin
OutLine(Copy(s, beg, last - beg +1));
end;
end
else
if s[last] = ' ' then
OutLine(Copy(s, beg, last - beg))
else
OutLine(Copy(s, beg, last - beg + 1));
if ((Flags and flWordBreak) <> 0) and not WasBreak and (last = cur) then
if LoopPos = cur then
begin
beg := cur + 1;
cur := Length(s);
break;
end
else
LoopPos := cur;
if ByteType(s,last) = mbLeadByte then
//Tian 2001.03
begin
beg := last ;
last := beg;
end
else
If ByteType(s,last) = mbSingleByte then
begin
beg := last + 1;
last := beg;
end
else
If ByteType(s,last) =mbTrailByte then
begin
beg := last+1 ;
last := beg;
end;
end;
if s[cur] = ' ' then
last := cur;
Inc(cur);
end;
if beg <> cur then
OutLine(Copy(s, beg, cur - beg + 1) + #1);
end;
end;

其实我也不是想敲诈大家,只因小第刚来不久,想找点分好防身!
 
忘了说一声,我只在2。42版本下用过。其它还不知道行不行!
 
if ByteType(s,last) = mbLeadByte then
//Tian 2001.03
!!!!!!!!!!!!!!!!!
这是人家tian兄修改的,请勿窃为己有!!!
君子爱财,取之有道
 
抗议,这个tian兄是2.42版本的汉化作者。我用的是汉化版本。
 
tian的汉化版已解决了折行问题,你只不过是把英文和空格折行去掉而已
附:tian汉化版原程序
if WasBreak then
OutLine(Copy(s, beg, last - beg + 1) + '-')
else
if s[last] = ' ' then
OutLine(Copy(s, beg, last - beg)) else
if ByteType(s,last) = mbLeadByte then
//Tian 2001.03
//Tian 2001.02
OutLine(Copy(s, beg, last - beg )) //如果是汉字前半字符
else
OutLine(Copy(s, beg, last - beg + 1));
 
我相信叶枫为此付出了劳动,无论如何,还是值得鼓励,希望大家有何经验,
尽管放上来,版主高价收购,呵呵,就怕我分不够多 [:)]
叶枫,请去http://211.101.4.25/delphibbs/dispq.asp?lid=618940拿分。
 
to wuyang:
tian的汉化版的确解决了一部分的问题,但是还存在一些bug。不错,
我只是在上面做了一点点改动。不应该算是自己的功劳。
to liuly:
谢谢你对我的支持,这分小弟受之有愧。不敢要。。。
 
to 叶枫
如果修改了bug,那这分是你应当拿的,只不过也要遵重别人的劳动成果
能告诉我修改了那些bug吗?我也想知道
 
> 来自:叶枫, 时间:2001-9-10 17:08:00, ID:618873
> 抗议,这个tian兄是2.42版本的汉化作者。我用的是汉化版本。
tian兄改写了2.42版吗?怎么找不到?我可是一直在用2.41C呀!
另,2.43也出来这么久了,有谁知道有没有出2.43C版,到哪里有下载呢?
 
有谁知道王寒松得ERePort怎么用吗?
 
既然如此,谁急需分数的话,
去http://211.101.4.25/delphibbs/dispq.asp?lid=618940报个到吧。
[:D][:D][:D][:D][:D][:D][:D][:D][:D][:D]
 
to wuyang:
主要是中文字符串的折行和字符串中带有空格的问题。
 
接受答案了.
 
后退
顶部