* Some more fixes from Pascal Riekenberg to simplify AfterPrintBand

git-svn-id: trunk@37508 -
This commit is contained in:
michael 2017-10-23 12:17:51 +00:00
parent 2547643cbb
commit 7b12811f52

View File

@ -114,7 +114,7 @@ type
TFPReportHTMLTag = (htRegular, htBold, htItalic);
TFPReportHTMLTagSet = set of TFPReportHTMLTag;
TFPReportColumnLayout = (clVertical, clHorizontal);
TFPReportFooterPosition = (fpNormal, fpStackAtBottom);
TFPReportBandPosition = (bpNormal, bpStackAtBottom);
TFPReportSection = (rsNone, rsPage, rsColumn);
TFPReportVisibleOnPage = (vpAll, vpFirstOnly, vpLastOnly, vpFirstAndLastOnly, vpNotOnFirst, vpNotOnLast, vpNotOnFirstAndLast);
// For color coding
@ -866,8 +866,10 @@ type
FFont: TFPReportFont;
FIsOverflowed: Boolean;
FIsColumnType: Boolean;
FBandPosition: TFPReportBandPosition;
function GetFont: TFPReportFont;
function IsStringValueZero(const AValue: string): boolean;
procedure SetBandPosition(pBandPosition: TFPReportBandPosition); virtual;
procedure SetChildBand(AValue: TFPReportChildBand);
procedure ApplyStretchMode;
procedure SetFont(AValue: TFPReportFont);
@ -889,7 +891,7 @@ type
procedure BeginRuntimeProcessing; virtual;
procedure EndRuntimeProcessing; virtual;
function NeedsUpdateYPos: Boolean; virtual;
procedure AfterPrintBand(aList : TBandList; aBand: TFPReportCustomBand); virtual;
procedure AfterPrintBand(pBand: TFPReportCustomBand); virtual;
procedure BeforePrintWithChilds; virtual;
procedure MovedToNextPageWithChilds; virtual;
procedure AfterPrintWithChilds; virtual;
@ -897,6 +899,10 @@ type
property UseParentFont: boolean read FUseParentFont write SetUseParentFont;
{ when set to True then band and child bands are keept on the same page (no page break between them) }
property KeepTogetherWithChildren: Boolean read FKeepTogetherWithChildren write SetKeepTogetherWithChildren default True;
{ band position:
fpNormal: after detail or inner group footer
fpStackAtBottom: stacked at bottom before page footer }
property BandPosition: TFPReportBandPosition read FBandPosition write SetBandPosition default bpStackAtBottom;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -1050,25 +1056,19 @@ type
TFPReportCustomColumnFooterBand = class(TFPReportCustomBandWithData)
private
FFooterPosition: TFPReportFooterPosition;
procedure SetFooterPosition(AValue: TFPReportFooterPosition);
protected
procedure DoWriteLocalProperties(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
function GetReportBandName: string; override;
procedure AfterPrintBand(aList : TBandList; aBand: TFPReportCustomBand); override;
property FooterPosition: TFPReportFooterPosition read FFooterPosition write SetFooterPosition default fpStackAtBottom;
public
constructor Create(AOwner: TComponent); override;
procedure Assign(Source: TPersistent); override;
Class Function ReportBandType : TFPReportBandType; override;
procedure ReadElement(AReader: TFPReportStreamer); override;
property BandPosition;
end;
TFPReportColumnFooterBand = class(TFPReportCustomColumnFooterBand)
published
property Font;
property FooterPosition;
property BandPosition;
property UseParentFont;
property OnBeforePrint;
end;
@ -1090,13 +1090,11 @@ type
FRTBands: TBandList;
FReprintedHeader: TFPReportSections;
FStartOnNewSection: TFPReportSection;
FFooterPosition: TFPReportFooterPosition;
FDetailsPrinted: Boolean;
{ runtime properties }
FNeedsReprintedHeader: Boolean;
FNeedsIntermediateFooter: Boolean;
FNeedsPrevVariables: Boolean;
procedure SetFooterPosition(pFooterPosition: TFPReportFooterPosition);
procedure SetGroupHeader(AValue: TFPReportCustomGroupHeaderBand);
procedure InternalEvaluateGroupCondition;
procedure SetKeepTogetherWithChildren(pKeepTogetherWithChildren: Boolean); override;
@ -1128,10 +1126,7 @@ type
property OverflowedFooterNeedsReprintedHeader: TFPReportSections read FOverflowedFooterNeedsReprintedHeader write SetOverflowedFooterNeedsReprintedHeader;
{ print footer before every page/column break }
property IntermediateFooter: TFPReportSections read FIntermediateFooter write FIntermediateFooter;
{ footer position:
fpNormal: after detail or inner group footer
fpStackAtBottom: stacked at bottom before page footer }
property FooterPosition: TFPReportFooterPosition read FFooterPosition write SetFooterPosition default fpNormal;
property BandPosition;
{ if first data band flows over to next page/column, also move this header }
property OverflowWithFirstDataBand: TFPReportSections read FOverflowWithFirstDataBand write SetOverflowWithFirstDataBand default [rsPage, rsColumn];
function NeedsOverflowWithFirstDataBand(pIsLastColumn: Boolean): Boolean;
@ -1167,7 +1162,7 @@ type
property OverflowedFooterNeedsReprintedHeader;
property IntermediateFooter;
property OverflowWithFirstDataBand;
property FooterPosition;
property BandPosition;
end;
@ -1225,6 +1220,7 @@ type
FDoNotConsiderInFooterSpaceNeeded: Boolean;
procedure SetGroupHeader(const AValue: TFPReportCustomGroupHeaderBand);
protected
procedure SetBandPosition(pBandPosition: TFPReportBandPosition); override;
function GetReportBandName: string; override;
procedure DoWriteLocalProperties(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
@ -1232,12 +1228,12 @@ type
procedure EndRuntimeProcessing; override;
function NeedsUpdateYPos: Boolean; override;
procedure BeforePrintWithChilds; override;
procedure AfterPrintBand(aList : TBandList; aBand: TFPReportCustomBand); override;
procedure AfterPrintWithChilds; override;
property GroupHeader: TFPReportCustomGroupHeaderBand read FGroupHeader write SetGroupHeader;
public
procedure ReadElement(AReader: TFPReportStreamer); override;
Class Function ReportBandType : TFPReportBandType; override;
property BandPosition;
end;
@ -1246,6 +1242,7 @@ type
property ChildBand;
property Font;
property GroupHeader;
property BandPosition;
property UseParentFont;
property KeepTogetherWithChildren;
property OnBeforePrint;
@ -2346,14 +2343,14 @@ begin
Result := TFPReportPaperOrientation(GetEnumValue(TypeInfo(TFPReportPaperOrientation), AName));
end;
function FooterPositionToString(AEnum: TFPReportFooterPosition): string; inline;
function BandPositionToString(AEnum: TFPReportBandPosition): string; inline;
begin
result := GetEnumName(TypeInfo(TFPReportFooterPosition), Ord(AEnum));
result := GetEnumName(TypeInfo(TFPReportBandPosition), Ord(AEnum));
end;
function StringToFooterPosition(AName: string): TFPReportFooterPosition; inline;
function StringToBandPosition(AName: string): TFPReportBandPosition; inline;
begin
Result := TFPReportFooterPosition(GetEnumValue(TypeInfo(TFPReportFooterPosition), AName));
Result := TFPReportBandPosition(GetEnumValue(TypeInfo(TFPReportBandPosition), AName));
end;
function VisibleOnPageToString(AEnum: TFPReportVisibleOnPage): string; inline;
@ -5028,45 +5025,15 @@ end;
{ TFPReportCustomColumnFooterBand }
procedure TFPReportCustomColumnFooterBand.SetFooterPosition(AValue: TFPReportFooterPosition);
begin
if FFooterPosition = AValue then
Exit;
FFooterPosition := AValue;
end;
procedure TFPReportCustomColumnFooterBand.DoWriteLocalProperties(AWriter: TFPReportStreamer; AOriginal: TFPReportElement);
begin
inherited DoWriteLocalProperties(AWriter, AOriginal);
AWriter.WriteString('FooterPosition', FooterPositionToString(FFooterPosition));
end;
function TFPReportCustomColumnFooterBand.GetReportBandName: string;
begin
Result := 'ColumnFooterBand';
end;
procedure TFPReportCustomColumnFooterBand.AfterPrintBand(
aList : TBandList; aBand: TFPReportCustomBand);
begin
inherited AfterPrintBand(aList, aBand);
if FFooterPosition = fpStackAtBottom then
begin
aBand.RTLayout.Top := -1;
aList.Add(aBand);
end;
end;
constructor TFPReportCustomColumnFooterBand.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FFooterPosition := fpStackAtBottom;
end;
procedure TFPReportCustomColumnFooterBand.Assign(Source: TPersistent);
begin
inherited Assign(Source);
FFooterPosition := TFPReportCustomColumnFooterBand(Source).FooterPosition;
FBandPosition := bpStackAtBottom;
end;
class function TFPReportCustomColumnFooterBand.ReportBandType: TFPReportBandType;
@ -5074,12 +5041,6 @@ begin
Result:=btColumnFooter;
end;
procedure TFPReportCustomColumnFooterBand.ReadElement(AReader: TFPReportStreamer);
begin
inherited ReadElement(AReader);
FFooterPosition := StringToFooterPosition(AReader.ReadString('FooterPosition', 'fpStackAtBottom'));
end;
{ TFPReportCustomGroupHeaderBand }
procedure TFPReportCustomGroupHeaderBand.SetGroupHeader(AValue: TFPReportCustomGroupHeaderBand);
@ -5099,19 +5060,6 @@ begin
end;
end;
procedure TFPReportCustomGroupHeaderBand.SetFooterPosition(
pFooterPosition: TFPReportFooterPosition);
begin
if FFooterPosition = pFooterPosition then Exit;
FFooterPosition := pFooterPosition;
if (FFooterPosition = fpStackAtBottom)
and (FStartOnNewSection = rsNone) then
if Page.IsMultiColumn then
FStartOnNewSection := rsColumn
else
FStartOnNewSection := rsPage;
end;
function TFPReportCustomGroupHeaderBand.GetReportBandName: string;
begin
Result := 'GroupHeaderBand';
@ -5123,7 +5071,6 @@ begin
AWriter.WriteString('GroupCondition', FGroupCondition);
AWriter.WriteString('StartOnNewSection', ReportSectionToString(FStartOnNewSection));
AWriter.WriteString('ReprintedHeader', ReportSectionsToString(FReprintedHeader));
AWriter.WriteString('FooterPosition', FooterPositionToString(FFooterPosition));
AWriter.WriteString('IntermediateFooter', ReportSectionsToString(FIntermediateFooter));
AWriter.WriteString('OverflowedFooterNeedsReprintedHeader', ReportSectionsToString(FOverflowedFooterNeedsReprintedHeader));
AWriter.WriteString('OverflowWithFirstDataBand', ReportSectionsToString(FOverflowWithFirstDataBand));
@ -5206,7 +5153,6 @@ begin
FParentGroupHeader := nil;
FChildGroupHeader := nil;
FGroupFooter := nil;
FFooterPosition := fpNormal;
FOverflowWithFirstDataBand := [rsPage, rsColumn];
FStartOnNewSection := rsNone;
FRTBands := TBandList.Create;
@ -5234,7 +5180,6 @@ begin
FIntermediateFooter := E.IntermediateFooter;
FOverflowedFooterNeedsReprintedHeader := E.OverflowedFooterNeedsReprintedHeader;
FOverflowWithFirstDataBand := E.OverflowWithFirstDataBand;
FFooterPosition := E.FooterPosition;
end;
end;
@ -5245,7 +5190,6 @@ begin
FStartOnNewSection := StringToReportSection(AReader.ReadString('StartOnNewSection', 'rsNone'));
FReprintedHeader := StringToReportSections(AReader.ReadString('ReprintedHeader', ''));
FIntermediateFooter := StringToReportSections(AReader.ReadString('IntermediateFooter', ''));
FFooterPosition := StringToFooterPosition(AReader.ReadString('FooterPosition', 'fpNormal'));
FOverflowedFooterNeedsReprintedHeader := StringToReportSections(AReader.ReadString('OverflowedFooterNeedsReprintedHeader', ''));
FOverflowWithFirstDataBand := StringToReportSections(AReader.ReadString('OverflowWithFirstDataBand', 'rsPage,rsColumn'));
end;
@ -7735,6 +7679,13 @@ begin
end;
end;
procedure TFPReportCustomBand.SetBandPosition(
pBandPosition: TFPReportBandPosition);
begin
if FBandPosition = pBandPosition then Exit;
FBandPosition := pBandPosition;
end;
procedure TFPReportCustomBand.SetChildBand(AValue: TFPReportChildBand);
var
b: TFPReportCustomBand;
@ -7954,6 +7905,7 @@ begin
FChildBand := E.ChildBand;
FStretchMode := E.StretchMode;
FVisibleOnPage := E.VisibleOnPage;
FBandPosition := E.BandPosition;
UseParentFont := E.UseParentFont;
if not UseParentFont then
Font.Assign(E.Font);
@ -7987,6 +7939,7 @@ procedure TFPReportCustomBand.DoWriteLocalProperties(AWriter: TFPReportStreamer;
begin
inherited DoWriteLocalProperties(AWriter, AOriginal);
AWriter.WriteBoolean('UseParentFont', UseParentFont);
AWriter.WriteString('BandPosition', BandPositionToString(FBandPosition));
if not UseParentFont then
begin
AWriter.WriteString('FontName', Font.Name);
@ -8010,7 +7963,7 @@ begin
Result := True;
end;
procedure TFPReportCustomBand.AfterPrintBand(aList: TBandList; aBand: TFPReportCustomBand);
procedure TFPReportCustomBand.AfterPrintBand(pBand: TFPReportCustomBand);
begin
// Do nothing
end;
@ -8038,6 +7991,7 @@ begin
FUseParentFont := True;
FFont := nil;
FKeepTogetherWithChildren := True;
FBandPosition := bpNormal;
end;
destructor TFPReportCustomBand.Destroy;
@ -8079,6 +8033,7 @@ begin
// Page.Report.AddReference(self, 'ChildBand', s);
FVisibleOnPage := StringToVisibleOnPage(AReader.ReadString('VisibleOnPage', 'vpAll'));
FKeepTogetherWithChildren := AReader.ReadBoolean('KeepTogetherWithChildren', FKeepTogetherWithChildren);
FBandPosition := StringToBandPosition(AReader.ReadString('BandPosition', 'bpNormal'));
FUseParentFont := AReader.ReadBoolean('UseParentFont', UseParentFont);
if not FUseParentFont then
begin
@ -8219,6 +8174,18 @@ begin
end;
end;
procedure TFPReportCustomGroupFooterBand.SetBandPosition(
pBandPosition: TFPReportBandPosition);
begin
inherited SetBandPosition(pBandPosition);
if (FBandPosition = bpStackAtBottom) and
(FGroupHeader.FStartOnNewSection = rsNone) then
if Page.IsMultiColumn then
FGroupHeader.FStartOnNewSection := rsColumn
else
FGroupHeader.FStartOnNewSection := rsPage;
end;
function TFPReportCustomGroupFooterBand.GetReportBandName: string;
begin
Result := 'GroupFooterBand';
@ -8252,7 +8219,7 @@ end;
function TFPReportCustomGroupFooterBand.NeedsUpdateYPos: Boolean;
begin
Result := GroupHeader.FFooterPosition <> fpStackAtBottom;
Result := FBandPosition <> bpStackAtBottom;
end;
procedure TFPReportCustomGroupFooterBand.BeforePrintWithChilds;
@ -8261,18 +8228,6 @@ begin
Report.FRTGroupDetailsPrinted := GroupHeader.FDetailsPrinted;
end;
procedure TFPReportCustomGroupFooterBand.AfterPrintBand(
aList : TBandList; aBand: TFPReportCustomBand);
begin
inherited AfterPrintBand(aList, aBand);
if GroupHeader.FooterPosition = fpStackAtBottom then
begin
{ mark for handling in HandleBootomStackedFooters }
aBand.RTLayout.Top := -1;
aList.Add(aBand);
end;
end;
procedure TFPReportCustomGroupFooterBand.AfterPrintWithChilds;
begin
inherited AfterPrintWithChilds;
@ -9645,32 +9600,29 @@ function TFPReportLayouter.CommonRuntimeBandProcessing(const aBand: TFPReportCus
begin
aBand.MainBand.BeginRuntimeProcessing;
try
Result:=TFPReportCustomBand(aBand.PrepareObject(FRTPage));
Result.RecalcLayout;
Result.BeforePrint;
if Result.EvaluateVisibility then
Result:=TFPReportCustomBand(aBand.PrepareObject(FRTPage));
Result.RecalcLayout;
Result.BeforePrint;
if Result.EvaluateVisibility then
begin
if aBand.MainBand is TFPReportCustomPageFooterBand then
begin
if aBand.MainBand is TFPReportCustomPageFooterBand then
begin
FPageFooterYPos := FPageFooterYPos - Result.RTLayout.Height;
Result.RTLayout.Top := FPageFooterYPos;
end
else
Result.RTLayout.Top := FLastYPos;
if aBand.FIsColumnType then
Result.RTLayout.Left := FLastXPos;
FPageFooterYPos := FPageFooterYPos - Result.RTLayout.Height;
Result.RTLayout.Top := FPageFooterYPos;
end
else
begin
{ remove band from current page }
Result.Page.RemoveChild(Result);
{ free mem }
FreeAndNil(Result);
end;
finally
aBand.MainBand.EndRuntimeProcessing;
Result.RTLayout.Top := FLastYPos;
if aBand.FIsColumnType then
Result.RTLayout.Left := FLastXPos;
end
else
begin
{ remove band from current page }
Result.Page.RemoveChild(Result);
{ free mem }
FreeAndNil(Result);
end;
aBand.MainBand.EndRuntimeProcessing;
end;
function TFPReportLayouter.HandleHeaderBands: Boolean;
@ -9689,7 +9641,7 @@ procedure TFPReportLayouter.HandleFooterBands;
Var
lFooter, lRTBand, lBand: TFPReportCustomBand;
i: Integer;
lFooterPosition: TFPReportFooterPosition;
lBandPosition: TFPReportBandPosition;
lList: TBandList;
lGrp: TFPReportCustomGroupHeaderBand;
@ -9707,28 +9659,25 @@ begin
lBand := lBand.ChildBand;
end;
FPageFooter.BeforePrintWithChilds;
try
for i := lList.Count-1 downto 0 do
begin
lRTBand := CommonRuntimeBandProcessing(lList[i]);
if Assigned(lRTBand) then
FPageFooter.AfterPrintBand(FRTBottomStackedFooterList , lRTBand);
end
finally
FPageFooter.AfterPrintWithChilds;
end;
for i := lList.Count-1 downto 0 do
begin
lRTBand := CommonRuntimeBandProcessing(lList[i]);
if Assigned(lRTBand) then
FPageFooter.AfterPrintBand(lRTBand);
end
FPageFooter.AfterPrintWithChilds;
finally
lList.Free;
end;
end;
{ 2. from top to bottom for group footer }
for i:=FGroupFooterList.Count-1 downto 0 do
try
begin
lFooter:=FGroupFooterList[i];
lGrp := TFPReportCustomGroupFooterBand(lFooter).GroupHeader;
if not lGrp.NeedsIntermediateFooter(RTIsLastColumn) then
Continue;
lFooterPosition := lGrp.FooterPosition;
lBandPosition := lFooter.BandPosition;
Report.FRTInIntermediateGroupFooter := True;
lFooter.BeforePrintWithChilds;
lBand := lFooter;
@ -9736,14 +9685,19 @@ begin
begin
lRTBand := CommonRuntimeBandProcessing(lBand);
if Assigned(lRTBand) then begin
if lFooterPosition = fpNormal then
if lBandPosition = bpNormal then
UpdateSpaceRemaining(lRTBand);
lFooter.AfterPrintBand(FRTBottomStackedFooterList, lRTBand);
lFooter.AfterPrintBand(lRTBand);
if lFooter.BandPosition = bpStackAtBottom then
begin
{ mark for HandleBottomStackedFooters }
lRTBand.RTLayout.Top := -1;
FRTBottomStackedFooterList.Add(lRTBand);
end;
end;
lBand := lBand.ChildBand;
end;
lFooter.AfterPrintWithChilds;
finally
Report.FRTInIntermediateGroupFooter := False;
end;
{ 3. Handle column footer }
@ -9757,7 +9711,7 @@ var
i: Integer;
lFooter: TFPReportCustomBand;
begin
{ move all allready layouted group footers (only fpStackAtBottom)
{ move all allready layouted group footers (only bpStackAtBottom)
up by offset of page footer }
lOffset := FRTPage.RTLayout.Top + FRTPage.RTLayout.Height - FPageFooterYPos;
for i:=0 to FRTBottomStackedFooterList.Count-1 do
@ -9805,13 +9759,10 @@ begin
Report.FRTInRepeatedGroupHeader := True;
if lGrp.FNeedsPrevVariables then
Report.RTBeginUsePrevVariableValues;
try
ShowGroupHeaderBand(lGrp, False);
finally
Report.FRTInRepeatedGroupHeader := False;
if lGrp.FNeedsPrevVariables then
Report.RTEndUsePrevVariableValues;
end;
ShowGroupHeaderBand(lGrp, False);
Report.FRTInRepeatedGroupHeader := False;
if lGrp.FNeedsPrevVariables then
Report.RTEndUsePrevVariableValues;
end;
end;
end;
@ -9823,21 +9774,24 @@ var
begin
aBand.BeforePrintWithChilds;
try
lBand := aBand;
while Assigned(lBand) do
lBand := aBand;
while Assigned(lBand) do
begin
lRTBand := CommonRuntimeBandProcessing(lBand);
if Assigned(lRTBand) then
begin
lRTBand := CommonRuntimeBandProcessing(lBand);
if Assigned(lRTBand) then
UpdateSpaceRemaining(lRTBand);
aBand.AfterPrintBand(lRTBand);
if aBand.BandPosition = bpStackAtBottom then
begin
UpdateSpaceRemaining(lRTBand);
aBand.AfterPrintBand(FRTBottomStackedFooterList, lRTBand);
{ mark for HandleBottomStackedFooters }
lRTBand.RTLayout.Top := -1;
FRTBottomStackedFooterList.Add(lRTBand);
end;
lBand := lBand.ChildBand;
end;
finally
aBand.AfterPrintWithChilds;
lBand := lBand.ChildBand;
end;
aBand.AfterPrintWithChilds;
end;
function TFPReportLayouter.NoSpaceRemaining: boolean;
@ -9970,7 +9924,7 @@ var
i: Integer;
lRTBand: TFPReportCustomBand;
begin
// handle fpStackAtBottom from bottom to top
// handle bpStackAtBottom from bottom to top
lPageFooterYPos := (FRTPage.RTLayout.Top + FRTPage.RTLayout.Height);
for i := FRTBottomStackedFooterList.Count-1 downto 0 do
begin
@ -10034,32 +9988,28 @@ begin
for i:=0 to FGroupFooterList.Count-1 do
begin
lValue := 0;
try
lFooter:=FGroupFooterList[i];
lGrpFooter := TFPReportCustomGroupFooterBand(lFooter);
if not lGrpFooter.GroupHeader.NeedsIntermediateFooter(RTIsLastColumn) or
lGrpFooter.FDoNotConsiderInFooterSpaceNeeded then
Continue;
Report.FRTInIntermediateGroupFooter := True;
while Assigned(lFooter) do
begin
lBand:=TFPReportCustomBand(lFooter.PrepareObject(FRTPage));
try
lBand.BeforePrint;
if lBand.EvaluateVisibility then begin
lValue := lValue + lBand.RTLayout.Height;
Result := Result + lBand.RTLayout.Height;
end;
lFooter := lFooter.ChildBand;
finally
lBand.Page.RemoveChild(lBand);
lBand.Free;
lFooter:=FGroupFooterList[i];
lGrpFooter := TFPReportCustomGroupFooterBand(lFooter);
if not lGrpFooter.GroupHeader.NeedsIntermediateFooter(RTIsLastColumn) or
lGrpFooter.FDoNotConsiderInFooterSpaceNeeded then
Continue;
Report.FRTInIntermediateGroupFooter := True;
while Assigned(lFooter) do
begin
lBand:=TFPReportCustomBand(lFooter.PrepareObject(FRTPage));
try
lBand.BeforePrint;
if lBand.EvaluateVisibility then begin
lValue := lValue + lBand.RTLayout.Height;
Result := Result + lBand.RTLayout.Height;
end;
lFooter := lFooter.ChildBand;
finally
lBand.Page.RemoveChild(lBand);
lBand.Free;
end;
Report.FRTInIntermediateGroupFooter := False;
finally
//write('GF:',FormatFloat('#,##0.0', lValue),' ');
end;
Report.FRTInIntermediateGroupFooter := False;
end;
if Assigned(FPageFooter) then
begin
@ -10737,7 +10687,15 @@ begin
if NoSpaceRemaining then
overFlowAction := HandleOverflowedBands(lHandledBands, aBand, lRTBand);
if (overFlowAction=oaNone) then
aBand.AfterPrintBand(FRTBottomStackedFooterList, lRTBand)
begin
aBand.AfterPrintBand(lRTBand);
if aBand.BandPosition = bpStackAtBottom then
begin
{ mark for HandleBottomStackedFooters }
lRTBand.RTLayout.Top := -1;
FRTBottomStackedFooterList.Add(lRTBand);
end
end
else
Report.FRTIsOverflowed := True;
end;