quickreport的bug quickreport不认识中文,所以不支持中文的自动换行 使用 procedure AddWord(aWord : string); {$ifdef ver100} var S: string; {$endif} begin if aLineWidth(NewLine + aWord) > Width then begin if NewLine = '' then begin {$ifdef ver100} if SysLocale.FarEast then begin while true do 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)) < Width do begin NewLine := NewLine + copy(aWord, 1, 1); Delete(aWord, 1, 1); end; {$else} while aLineWidth(NewLine + copy(aWord, 1, 1)) < Width do begin NewLine := NewLine + copy(aWord, 1, 1); Delete(aWord, 1, 1); end; {$endif} aWord := ''; end; FlushLine; if aLineWidth(aWord) > Width then begin if NewLine = '' then begin if Width = 0 then aWord := '' else while aLineWidth(aWord) > Width do {$ifdef ver100} if ByteType(aWord, Length(aWord)) = mbTrailByte then Delete(aWord, Length(aWord)-1, 2) else {$endif} 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里面的相应过程,然后编译
QuickRep是Delphi中问题最多的控件了,所以在最新的Delphi 7 中换成了另外一家公司的报表控件
quickreport不认识中文,所以不支持中文的自动换行
使用
procedure AddWord(aWord : string);
{$ifdef ver100}
var
S: string;
{$endif}
begin
if aLineWidth(NewLine + aWord) > Width then
begin
if NewLine = '' then
begin
{$ifdef ver100}
if SysLocale.FarEast then
begin
while true do
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)) < Width do
begin
NewLine := NewLine + copy(aWord, 1, 1);
Delete(aWord, 1, 1);
end;
{$else}
while aLineWidth(NewLine + copy(aWord, 1, 1)) < Width do
begin
NewLine := NewLine + copy(aWord, 1, 1);
Delete(aWord, 1, 1);
end;
{$endif}
aWord := '';
end;
FlushLine;
if aLineWidth(aWord) > Width then
begin
if NewLine = '' then
begin
if Width = 0 then
aWord := ''
else
while aLineWidth(aWord) > Width do
{$ifdef ver100}
if ByteType(aWord, Length(aWord)) = mbTrailByte then
Delete(aWord, Length(aWord)-1, 2)
else
{$endif}
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里面的相应过程,然后编译
说具体一点好吗?具体替换哪个过程?谢谢!
procedure AddWord(aWord : string);把这个过程完全替换掉!
,怎么替换就不用说了吧!
procedure Tform1.QRDBText4Print(sender: TObject;
var Value: String);
begin
Value:= wrap_line(Value, 15);
end;{------------------------------------------------------}
{
功能:对一个Pascal字符串进行定长换行处理
入口参数:Value -- 要转换的Pascal字符串, max_len_line -- 每行Unicode字符个数。
返回结果:转换后的字符串。
}
function wrap_line(Value: String; max_len_line: integer ): String;
var
ws: WideString;
s: string;
begin
ws:= Value;
s:= '';
while length(ws) > MAX_LEN_LINE do begin
s:= s + Copy(ws, 1, MAX_LEN_LINE) + #13;
delete(ws, 1, MAX_LEN_LINE);
end; Result:= s + ws;
end;
把QRDBtext的左右长度拉为所需长度上下长度可不管