各位大虾:
你门好。 我的工作环境是繁体xp+delphi7.0+reportbuilder7.03版本,在用reportbuilder作报表时,ppdbmemo换行乱码,后来我在网上找了改ppPlainText.pas 中的procedure TppTextWrapper.WrapCharacters(const aLine: String; var aNextWord, aRemainingChars: String);代码,我改了之后。还是不行,希望各位指点一下。(以前好象在win2000下没问题)。 谢谢了。
你门好。 我的工作环境是繁体xp+delphi7.0+reportbuilder7.03版本,在用reportbuilder作报表时,ppdbmemo换行乱码,后来我在网上找了改ppPlainText.pas 中的procedure TppTextWrapper.WrapCharacters(const aLine: String; var aNextWord, aRemainingChars: String);代码,我改了之后。还是不行,希望各位指点一下。(以前好象在win2000下没问题)。 谢谢了。
你是怎么改的?
應該是WrapCharacters例程中的變量申明類型改一下就可以
lsCurrentLine: WideString;
lsNextWord: WideString;
然后重新編譯相關dpk即可
1。修改rbRCL107.dpk中的ppPlainText.pas
// ppPlainText.pas procedure TppTextWrapper.WrapCharacters(const aLine: String; var aNextWord, aRemainingChars: String);
var
lbFits: Boolean;
liLineWidth: Integer;
liIndex: Integer;
lsCurrentLine: String;
lsNextWord: String;
beginlsNextWord := aNextWord;
lsCurrentLine := aLine;liIndex := 1;
lbFits := True;
aRemainingChars := '';while lbFits and (liIndex <= Length(lsNextWord)) do
beginliLineWidth := CalcTextWidth(lsCurrentLine lsNextWord[liIndex]);{there is room to print next word on current line}
if (liLineWidth <= FWidthAvailable) then
lsCurrentLine := lsCurrentLine lsNextWord[liIndex]else
begin
lbFits := False;if (liIndex = 1) then
beginif (aLine <> '') then
begin
aNextWord := '';aRemainingChars := lsNextWord;
endelse
begin
aNextWord := lsNextWord[1];aRemainingChars := Copy(lsNextWord, 2, Length(lsNextWord));
end;endelse
begin
///修改--begin
if StrByteType(Pchar(lsNextWord),liIndex)=mbLeadByte then //如果换行的第一个字符是中文的 ////////{就}
begin
aNextWord := Copy(lsNextWord, 1, liIndex - 2);
aRemainingChars := Copy(lsNextWord, liIndex-1, Length(lsNextWord));
end else
begin
aNextWord := Copy(lsNextWord, 1, liIndex - 1);
aRemainingChars := Copy(lsNextWord, liIndex, Length(lsNextWord));
end;
///修改--end;
end;end;Inc(liIndex);end;end;2、重新编译rbRCL107.bpk
3、关闭delphi.
4、\Program Files\Borland\Delphi7\Projects\Bpl 中复制rbRCL107.bpl 和rbRCL107.dcp到
\WINDOWS\system32 覆盖原来的文件。
再次打开delphi,试一试,呵呵,已经搞定了!
///////
以上我是在网上看到的,我记的好象以前在win2000x下改了是成共的。现在操作系统换成xp了,我照上面改了之后,还是不行,希望大家指点一下。
若是后者,在編譯完dpk後,除了丟到system32外,還有重新編譯一下程序...
若重新輸入的沒問題,那就是這個原因了。
if Bytetype(lsNextWord,liIndex - 1) in [mbLeadByte] then //就是換上這一句話就OK了。