QRLabel自動換行的問題(60分)

  • 主题发起人 主题发起人 ottsoft
  • 开始时间 开始时间
O

ottsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
用QR做報表,在OnNeedData事件裡面自己處理數據
用QRLabel顯示數據,怎麼樣才能使QRLabel能自動換行,
換行後,高度會增加一行,怎麼樣才能使其top也向上移,以保証其左右上下都能居中對齊
 
qrlabel.autostretch:=true;
qrlabel.autosize:=false;
 
1 使用QReport 3.06
2 比如QrLabel
AutoSize:=False;
Wordwarp:=true;
调整QrLabel的长宽,看你想要折成几行
 
我用的是QR 3.6.2
設置
autostretch:=true;
autosize:=false;
Wordwarp:=true;
都不行,現在換行我解決了,主要是top的問題,我要根據不同的Height調整其top值,但是無效
 
直接用它的qrlabel.height得不到实际高度吗????
那用一个函数来实现得到qrlabel的高度看看:
function GetTextHeight(QRLabel:TQRLabel):Integer;
var
L:TLabel;
begin
L:=TLabel.Create(Self);
L.WordWrap:=True;
L.AutoSize:=False;
L.Caption:= QRLabel.Caption;
L.Font:=QRLabel.Font;
L.Width:=QRLabel.Width;
Result:=L.Height;
L.Free;
end;
 
我要的是動態設置QRLabel的Top值
 
对呀——你是怎么设置的,为什么不行呢???
我给你的就是求得qrlabel的高度,然后下一行的qrlabel的top就是qrlabel.top+GetTextHeight(qrlabel);了啊
到底是什么意思???我晕了~~~~
你qrlabel放到哪里的,detailband里???
detailband的onbeforeprint里写呢:
procedure TForm2.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
var
s,i:integer;
begin
s:=0;
for i:=DetailBand1.ControlCount-1do
wnto 0do
if DetailBand1.Controls is TQRLabel then
if s<(DetailBand1.Controls as TQRLabel).Height then
s:=(DetailBand1.Controls as TQRLabel).Height;
{ for i:=DetailBand1.ControlCount-1do
wnto 0do
if DetailBand1.Controls is TQRLabel then
if (DetailBand1.Controls as TQRLabel).Height<s then
(DetailBand1.Controls as TQRLabel).Height:=s;
}
Sender.Height:=s;
end;
 
hongxing_dl,跟我的想法一样。
再补充一下,你可以用TAG标识出你有可能想调整的LABEL
然后在打印前遍历一下控件组,如果是你做过记号的LABEL
则检查一下caption长度,如果超过一行, 则修改TOP属性。
这样可以了吧?
 

Similar threads

后退
顶部