FastReport2.45报表问题,急急急急急急急急急急急急急急急急急急急急急急急急! (100分)

  • 主题发起人 主题发起人 fpsky
  • 开始时间 开始时间
F

fpsky

Unregistered / Unconfirmed
GUEST, unregistred user!
近日,小弟用FastReport2.45做了一报表,其中有中文折行,在win2000下
调试通过,没有任何问题,但在任何装有win98的机子上运行,偶儿会出现
折行后的乱码!后又在其它装win2000的机子上测试,却正常,不知何故。
这种问题我找了以前的贴子,好像还没有,望大虾指教。
**不要让我用report machine(这个我试过了可以解决),但现在的情况不
允许有时间换控件!
 
98的问题,我也遇到过。没有办法。
你看来只有换控件了,[:(][:(][:(]
 
也在有fr2.46了,试试吧.
 
是不是有中文换行的时候出现乱码的,那跟中文字符有关,
你可以在程序中使用代码来控制一定长度时就换行,
不然中文2个字符,有时出问题.
 
to:hbezwwl
在win2000中是正常的,只有在win98不正常,谢谢!
 
你试下,把字体设置为标准的宋体或别的标准字体试下。
我以前有教训,利用了默认的字体,结果在98下有时看不到。
 
我也用到了fr2.45,却不知怎样解决这个问题,可以帮一帮我吗?
当word属性为真时,可以识别前导空格,但在一行最后有一横线。
当word属性为假时,不可识别前导空格,在一行的最后没有了横线。但我需要在第一行
有两个空格。
能否帮忙解决?我也提了这样一个问题,你看一看我的帖子,如果解决了,我会把分给你的。
thank............比较急啊。。。。
 
whf你在吗?不知你是怎么解决的?
 
这个控件在哪里下载啊!谢谢!
 
我的fastreport2.45是法文,你们是怎样的。
 
对呀,有中文或英文的吗?否则怎么用呢?
 
自己写了一个换行函数,可以参好rm改改fr
 
不好意思,借个地方问个问题!
为什么我的程序在没有装Delphi的机器上无法运行??
(FastReport2.46,Delphi)
 
to whf:
您能告诉我怎么做吗?您在这方面是高手,而我从来没有写过控件,更没有改过控件,无从下
手啊,谢谢。
 
把你现在的的Fr卸掉,我记得laotian的主页上有个版本已经解决了!把这个新的装上后
把你的程序重新编译一遍就可以了!版本可能是Fr241C,不好意思,地址忘了!
 
建议换控件,用report machine, whf提供了一个fr报表转换成rm的工具,在其主页上有下载,
不妨一用。http://rmachine.8u8.com/index1.html
 
太多了,换控件简直受不了,更源代码怎么实现?谢谢大家
 
to:whf
感谢您的回答,不是特急,我也不会如此冒昧。但终究菜鸟不会一夜成为大吓,看了RM中的代
码,好几万行啊,多数都不知是做什么用,更不要说叫我去找出关于中文换行的那个过程或
函数。还望再给小弟赐教,谢过!
 
抄来的(与我的方法不一样,我是写了一个换行函数)
来宾发言:解决fastreport 中文换行乱码(2996字节) 来宾姓名:东方蜘蛛
来宾发言:
解决中文换行乱码 ,在fr_class 查找 WrapLine 过程,替换为下面的过程,就
可以解决。
//const s:string
procedure WrapLine(const s: wideString);
//解决中文换行乱码 ZWZ
var
i, cur, beg, last, LoopPos: Integer;
WasBreak, CRLF: Boolean;
begin
CRLF := False;
LoopPos := 0;
for i := 1 to Length(s)do
if (s =#10) or (s=#13) then
// 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] =#10) or (s[cur]=#13) then
// if s[cur] in [#10, #13] then
begin
OutLine(Copy(s, beg, cur - beg) + #1);
while (cur 〈 Length(s)) and
((s[cur] =#10) or (s[cur]=#13))
// (s[cur] in [#10, #13])
do
Inc(cur);
beg := cur;
last := beg;
if (s[cur] =#10) or (s[cur]=#13) then
// 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 = ' ') or (s = ' ') or (s = '.') or (s = ',') or(s = '-'))do
//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
OutLine(Copy(s, beg, last - beg + 1) + '-')
else
if s[last] = ' ' then
OutLine(Copy(s, beg, last - beg)) else
begin
OutLine(Copy(s, beg, last - beg));
Dec(last);
end;
if ((Flags and flWordBreak) 〈> 0) and not WasBreak and (last = cur - 1) then
if LoopPos = cur then
begin
beg := cur + 1;
cur := Length(s);
break;
end
else
LoopPos := cur;
beg := last + 1;
last := beg;
end;
// if s[cur] in spaces then
last := cur;
if s[cur] = ' ' then
last := cur;
Inc(cur);
end;
if beg 〈> cur then
OutLine(Copy(s, beg, cur - beg + 1) + #1);
end;
end;
 
哥们:
我这里有一个好主意,我屡试不爽。你打开font设定框,把字体设为中文字体,字符集里面就多了一项
chinese_gb2312,然后把字符集设置成chinese_gb2312就可以了。这两步按照顺序来。
 
后退
顶部