请问在ReportBuild中DBtext怎样折行打印,我将wordwrap设成true,该字段内容就不显示。(100分)

  • 主题发起人 主题发起人 Wrong
  • 开始时间 开始时间
W

Wrong

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在ReportBuild中DBtext怎样折行打印,我将wordwrap设成true,该字段内容就不显示。
 
这个问题我碰到过,好象在Delphi4中,DBtext可以自动折行的,
在D5中可能不行,你不妨试一下DBRichText看看
我已好长时间没用Delphi了,不知对否
 
我试了,不行,谢谢了
 
要折行显示,必须设置wordwrap:=true,同时AutoSize:= false,AutoStretch := true.
 
改写QRCtrls.pas的Tcustonlabel.FormatLinnes的Addword:
procedure AddWord(aWord : string);
var
S: string;
begin
if aLineWidth(NewLine + aWord) > Width then
begin
if NewLine = '' then
begin
if SysLocale.FarEast then
begin
while truedo
begin
if (aWord[1] in LeadBytes) and (Length(aWord) > 1) then
S := copy(aWord, 1, 2)
else
S := copy(aWord, 1, 1);
if aLineWidth(NewLine + S) < Width then
begin
NewLine := NewLine + S;
Delete(aWord, 1, Length(S));
end
else
Break;
end;
end
else
while aLineWidth(NewLine + copy(aWord, 1, 1)) < Widthdo
begin
NewLine := NewLine + copy(aWord, 1, 1);
Delete(aWord, 1, 1);
end;
aWord := '';
end;
FlushLine;
if aLineWidth(aWord) > Width then
begin
if NewLine = '' then
begin
if Width = 0 then
aWord := ''
else
while aLineWidth(aWord) > Widthdo
if ByteType(aWord, Length(aWord)) = mbTrailByte then
Delete(aWord, Length(aWord)-1, 2)
else
Delete(aWord, Length(aWord), 1);
end;
NewLine := aWord;
FlushLine;
aWord := '';
end;
if not WordWrap then
begin
aWord := '';
LineFinished := true;
end;
end;
NewLine := NewLine + aWord;
end;
 
QuickReport 3.0.6可以自动折行
 
设置属性就可以了!不用这么麻烦的!
 
我记得e文可以折行,但中文不行.
 
scloudy is correct, but just set
wordwrap:=true,同时AutoSize:= false
DBTextdo
n't have AutoStretch property
 
需要对源码作一些修改。但不同版本的RB有不同的改法。
假设你的版本够新,你应该可以找到ppPlainText.pas这个文件(在它的Source目录里)
然后找到function TppPlainTextParser.GetNextWord: String;这一段
加几个语句,请仔细看下段代码:
function TppPlainTextParser.GetNextWord: String;
var
lbEndOfWord: Boolean;
lCharacter: Char;
lsWord: String;
begin

lsWord := '';
lbEndOfWord := False;
while not(lbEndOfWord) and not(FAllWordsParsed)do
begin
{move to next position in the text}
Inc(FCharPos);
{reached end of the text}
if (FCharPos > FTextLength) then
FAllWordsParsed := True
else
begin

lCharacter := FText[FCharPos];
(*-----------------解决汉字换行的问题 ------------ *)
(*-----------------Lighttop 添加于2001年6月12日 ---*)
if StrByteType(Pchar(FText),FCharPos-1) = mbTrailByte then
begin
lbEndOfWord := True;
if (lsWord <> '') then
lsWord := lsWord + lCharacter;
end
(*-----------------------------------------------*)
else
if (lCharacter = TppTextMarkups.Null) then
FAllWordsParsed := True
else
if (lCharacter = TppTextMarkups.Space) then
begin
lbEndOfWord := True;
if (lsWord = '') then
lsWord := TppTextMarkups.Space
else
Dec(FCharPos);
end
else
if (lCharacter = TppTextMarkups.CR) then
begin
lbEndOfWord := True;
if (lsWord <> '') then
Dec(FCharPos)
else
begin

if ((FCharPos + 1) <= FTextLength) and (FText[FCharPos + 1] = TppTextMarkups.LF) then
Inc(FCharPos);
{skip over the LF char since it was found immediately following CR}
if (FCharPos <= FTextLength) then
lsWord := TppTextMarkups.CRLF;
end;

end
else
if (lCharacter = TppTextMarkups.LF) then
begin
lbEndOfWord := True;
if (lsWord <> '') then
Dec(FCharPos)
else
if (FCharPos <= FTextLength) then
lsWord := TppTextMarkups.CRLF;
end
else
if (lCharacter = TppTextMarkups.Tab) then
begin
lbEndOfWord := True;
if (lsWord = '') then
lsWord := TppTextMarkups.Tab
else
Dec(FCharPos);
end
else
if ((FCharPos + 1) <= FTextLength) and (lCharacter + FText[FCharPos + 1] = TppTextMarkups.EOP) then
begin
lbEndOfWord := True;
if (lsWord <> '') then
Dec(FCharPos)
else
begin
Inc(FCharPos);
lsWord := TppTextMarkups.CRLF;
end;

end
else
lsWord := lsWord + lCharacter;
end;

end;

Result := lsWord;
end;
修改后保存,重新编译RB(或者你把Delphi搜索目录指向RB的Source目录)
重新编译你的程序,一切OK了。
或许预览时会见不到效果(汉字换行仍不正确),但打印时就好了。
如果你想在预览时也有正常表现,请老老实实重新编译RB,并把生成的相应的一些BPL文件(记不清了,
大概如此)复制到Windows系统目录下。请下RB的帮助文件。
另:
如果你的RB是早版本的,可能找不到这个文件。当然我也改过,不过一下找不到了。你可以到
www.csdn.net上去找找。在本论坛上以前也有位富翁引用过我的答案,可惜他没有说明引用自何方:)
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
I
回复
0
查看
375
import
I
后退
顶部