如何利用函数动态调整Band及Tfrxmemoview高度?
作者:zhuhm 来源:FastReport中文网 浏览:Loading... 日期:2012-08-24
问题描述:如何利用函数动态调整Band及Tfrxmemoview高度?
解决方法:我经常使用下面的几个函数来实现Band及Tfrxmemoview高度的动态调整,需要注意的是:下面的函数只能调整一个Band中多行的最后一行,如果只有一行(多数情况下应该是这样)就无所谓了,而且这是在宽度已经固定的前提下。在想要调整高度的Band的OnBeforePrint事件中写SetMemo(Sender);,代码如下,粘贴到代码页中就可以使用。
下面的代码也可以演变一些,实现动态宽度等。我多处都判断了Tag是否为7635,因为我经常需要单独调用其中的某个函数。
//7635为保留数字,表示不作任何调整,通常用在多行的最上方
function Biger(Old:Extended):Integer;
begin
Result:=Trunc(Old);
if Frac(Old)>0 then
Result:=Result+1;
end;
procedure JustHeight(Sender:TfrxComponent);
var
RealHeight:Integer;
begin
RealHeight:=Biger(TFrxMemoView(Sender).CalcHeight+TFrxMemoView(Sender).Top);
if Biger(TfrxBand(Sender.Parent).Height)<RealHeight then
begin
//若MEMO的高度小于BAND但计算高度大于BAND,则在调整BAND的函数中就会被调整
TfrxBand(Sender.Parent).Height:=Biger(RealHeight);
JustBandHeight(Sender.Parent);
end
else
TfrxMemoView(Sender).Height:=TfrxBand(Sender.Parent).Height
-TfrxMemoView(Sender).Top;
end;
procedure JustBandHeight(Sender:TfrxComponent);
var
I:Integer;
begin
for I:=0 to Sender.Objects.Count-1 do
if TObject(Sender.Objects.Items[I]) is TFrxMemoView then
if TFrxMemoView(Sender.Objects.Items[I]).Tag=7635 then Continue
else
//如果小才改变,如果大则不能改变
if Biger(TfrxMemoView(Sender.Objects.Items[I]).Height+
TfrxMemoView(Sender.Objects.Items[I]).Top)<>Biger(TfrxBand(Sender).Height) then
TfrxMemoView(Sender.Objects.Items[I]).Height:=
Biger(TfrxBand(Sender).Height-TfrxMemoView(Sender.Objects.Items[I]).Top);
end;
procedure JustMemo(Sender:TfrxComponent);
begin
if not Engine.FinalPass then Exit;
if Sender.Tag<>7635 then
JustHeight(Sender);
end;
procedure SetMemo(Sender:TfrxComponent);
var
I:Integer;
begin
for I:=0 to Sender.Objects.Count-1 do
if TObject(Sender.Objects.Items[I]) is TFrxMemoView then
if TfrxMemoView(Sender.Objects.Items[I]).Tag<>7635 then
TfrxMemoView(Sender.Objects.Items[I]).OnAfterData:=’JustMemo’;
end;
Tag标签:FastReport
上一篇:
如何在脚本中根据字段名改变Tfrxmemoview的内容?
下一篇:
如何在程序中指定打印机名称?