QuickRep1報表自動換行問題(沒分啦,不好意思)(5分)

  • 主题发起人 主题发起人 jsxs
  • 开始时间 开始时间
J

jsxs

Unregistered / Unconfirmed
GUEST, unregistred user!
我用QuickRep1做報表。用QRExpr1顯示數據庫中某一字段的內容! 可是這個字段內容有長有短,有些較長要分行顯示!
怎樣讓QRExpr中的內容自動分行呢?謝謝!
 
才5分啊
我处理换行,我是用QRrichtext的控件
 
TO:cowbird
是呀,老兄。沒分啦! 不好意思!
我不想用控件。沒其它辦法解決嗎?
 
QRExpr在使用时有BUG,有时达不到换行的要求,有时却可以的。所以还是不要使用的,我就碰到过这个问题的。你可以参考一下相关的书。
 
procedure TQRFormNY.QRLabelPrint(sender: TObject;
var Value: String);
var
SenderWidth: integer;
Line, Part, Final: string;
Posbegin
, PosEnd: integer;
i, j: integer;
LastIsEng: boolean;
begin
SenderWidth := (Sender as TQRCustomLabel).Width;
Part := '';
Final := '';
Line := Value;
// 首先删除行内所有换行
while pos(#10, Line) > 0do
Delete(Line, Pos(#10, Line), 1);
// 增加一个回车以方便下面的处理.
if Line[Length(Line)] <> #13 then
Line := Line + #13;
//循环查找#13,如果找到则处理找到范围内的数据,一直到全部处理完毕
Posbegin
:= 0;
PosEnd := 0;
for i := 0 to Length (Line)do
begin
if Line = #13 then
begin
Posbegin
:= PosEnd + 1;
// 这样可以在处理下一段的时候方便地生成开始和结束位置.
PosEnd := i;
Part := '';
j := Posbegin
;
while j <= PosEnddo
begin
if Line[j] < #128 then
begin
// an ascii character
Part := Part + Line[j];
j := j + 1;
LastIsEng := true;
end
else
begin
// a DBCS character
Part := Part + Line[j] + Line[j+1];
j := j + 2;
LastIsEng := false;
end;
// 判断目前是否已经超长
if QuickRepNY.TextWidth ((Sender as TQRCustomLabel).Font, part) > SenderWidth then
begin
// 需要剔除刚才的字符,
if LastIsEng then
begin
Delete (Part, Length (Part), 1);
j := j - 1;
end
else
begin
Delete (Part, Length (Part)-1, 2);
j := j - 2;
end;
//加入回车,
Part := Part + #13;
Final := Final + Part;
Part := '';
end;
end;
Final := Final + Part;
end;
end;
// 删除刚刚加入的回车
if Final [Length(Final)] = #13 then
Delete (Final, Length(Final), 1);
Value := Final;
end;
别人的不用谢我
 
TO:freeze06
你這個很麻煩,我看的頭都大啦,有沒有只設定屬性就可以的? 或者更簡單的?
 
这人啊要是懒到你这个份上也是难得……要是能有属性设我怎么这么闲的没事非给贴这么长的代码……亏你也是个程序员还怕看代码……爱用不用
 
TO:freeze06
我是最怕麻煩的! 這麼長我都不想去看! 我好象記得有位高手富翁說只須設置一下屬性就可以啦,不過我現在找不到哪個貼啦!
 
设置之针对英文……不支持中文换行
 
有沒有更簡單的辦法呀?
 
用QRRich那个控件可以换行
 
TO:nathanlee
是直接用QRRichtext嗎?要不要設置什麼屬性?
 
TO:nathanlee
用QRRichtext不行! QRRich控件在哪裡?
 
来自:cowbird, 时间:2003-8-8 15:38:00, ID:2094849
才5分啊
我处理换行,我是用QRrichtext的控件
相信我没错的[:)][:)]
 
TO:cowbird
老兄,能具體點嗎? QRrichtext怎樣顯示數據庫中字段的內容?
 
為什麼我用QRdbrichtext時顯示不出任何數據? 是怎麼回事呀?
 
我把QRDBText的autoStretch属性設置为True,autosize属性为False ,再把wordwrap设为true。可是還是不知道換行呀?是什麼原因?
另外我用QRDBRichText,什么都不顯示,是空的,没有数据显示,不知什么原因?
 
QReport的换行是有一个属性来控制的,好象叫AutoStrech,你可以将AutoSize设为False,将AutoStrech高为True。另外换行还有一个条件,如果所有字符都是连在一起的则不会换行,所以若想利用这些属性自动换行,则可以在打印时适当加一些空格。
当然这样的换行就比较粗糙了,如果想自己控制的话有两种方法,自己计算字符数和计算宽度控制换行或者利用Memo来实现换行,不过这样你可能要换控件了。
 
后退
顶部