ReportBuilder
中
ppMemo
在换行时会产生乱码。修改源代码可以搞定。
步骤如下
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;
begin
lsNextWord := aNextWord;
lsCurrentLine := aLine;
liIndex := 1;
lbFits := True;
aRemainingChars := '';
while lbFits and (liIndex <= Length(lsNextWord)) do
begin
liLineWidth := 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
begin
if (aLine <> '') then
begin
aNextWord := '';
aRemainingChars := lsNextWord;
end
else
begin
aNextWord := lsNextWord[1];
aRemainingChars := Copy(lsNextWord, 2, Length(lsNextWord));
end;
end
else
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,试一试,呵呵,已经搞定了!
步骤如下
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;
begin
lsNextWord := aNextWord;
lsCurrentLine := aLine;
liIndex := 1;
lbFits := True;
aRemainingChars := '';
while lbFits and (liIndex <= Length(lsNextWord)) do
begin
liLineWidth := 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
begin
if (aLine <> '') then
begin
aNextWord := '';
aRemainingChars := lsNextWord;
end
else
begin
aNextWord := lsNextWord[1];
aRemainingChars := Copy(lsNextWord, 2, Length(lsNextWord));
end;
end
else
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,试一试,呵呵,已经搞定了!