Browse Source

* Fix stretchmode for bands (bug ID 0033363)

git-svn-id: trunk@38596 -
michael 7 years ago
parent
commit
52e31f1f96
1 changed files with 40 additions and 31 deletions
  1. 40 31
      packages/fcl-report/src/fpreport.pp

+ 40 - 31
packages/fcl-report/src/fpreport.pp

@@ -667,6 +667,7 @@ type
     procedure SetVisible(const AValue: boolean);
     procedure SetVisibleExpr(AValue: String);
   protected
+    procedure ApplyStretchMode(const ADesiredHeight: TFPReportUnits);
     function GetDateTimeFormat: String; virtual;
     function ExpandMacro(const s: String; const AIsExpr: boolean): TFPReportString; virtual;
     function GetReportBand: TFPReportCustomBand; virtual;
@@ -904,12 +905,12 @@ type
     procedure ReassignParentFont;
     procedure   SetBandPosition(pBandPosition: TFPReportBandPosition); virtual;
     procedure   SetChildBand(AValue: TFPReportCustomChildBand);
-    procedure   ApplyStretchMode;
     procedure   SetFont(AValue: TFPReportFont);
     procedure   SetKeepTogetherWithChildren(pKeepTogetherWithChildren: Boolean); virtual;
     procedure   SetUseParentFont(AValue: boolean);
     procedure   SetVisibleOnPage(AValue: TFPReportVisibleOnPage);
   protected
+    function CalcDesiredHeight: TFPReportUnits; virtual;
     function    GetReportPage: TFPReportCustomPage; override;
     function    GetReportBandName: string; virtual;
     function    GetData: TFPReportData; virtual;
@@ -1077,6 +1078,7 @@ type
   published
     property    ChildBand;
     property    Font;
+    property    StretchMode;
     property    UseParentFont;
     property    VisibleOnPage;
     property    KeepTogetherWithChildren;
@@ -1094,6 +1096,7 @@ type
 
   TFPReportColumnHeaderBand = class(TFPReportCustomColumnHeaderBand)
   published
+    property    StretchMode;
     property    Data;
     property    Font;
     property    UseParentFont;
@@ -1118,6 +1121,7 @@ type
     property    BandPosition;
     property    UseParentFont;
     property    OnBeforePrint;
+    property    StretchMode;
   end;
 
 
@@ -1206,6 +1210,7 @@ type
     property    UseParentFont;
     property    KeepTogetherWithChildren;
     property    OnBeforePrint;
+    property    StretchMode;
     property    StartOnNewSection;
     property    ReprintedHeader;
     property    OverflowedFooterNeedsReprintedHeader;
@@ -1226,6 +1231,7 @@ type
 
   TFPReportTitleBand = class(TFPReportCustomTitleBand)
   published
+    property    StretchMode;
     property    ChildBand;
     property    Font;
     property    UseParentFont;
@@ -1252,6 +1258,7 @@ type
 
   TFPReportSummaryBand = class(TFPReportCustomSummaryBand)
   published
+    property    StretchMode;
     property    ChildBand;
     property    Font;
     property    StartNewPage;
@@ -1296,6 +1303,7 @@ type
     property    UseParentFont;
     property    KeepTogetherWithChildren;
     property    OnBeforePrint;
+    property    StretchMode;
   end;
 
 
@@ -1309,7 +1317,7 @@ type
 
   TFPReportDataHeaderBand = class(TFPReportCustomDataHeaderBand)
   published
-
+    property    StretchMode;
     property    Font;
     property    UseParentFont;
     property    OnBeforePrint;
@@ -1326,6 +1334,7 @@ type
 
   TFPReportDataFooterBand = class(TFPReportCustomDataFooterBand)
   published
+    property    StretchMode;
     property    Font;
     property    UseParentFont;
     property    OnBeforePrint;
@@ -1813,7 +1822,6 @@ type
     procedure   SetText(AValue: TFPReportString);
     procedure   SetUseParentFont(AValue: Boolean);
     procedure   WrapText(const AText: String; var ALines: TStrings; const ALineWidth: TFPReportUnits; out AHeight: TFPReportUnits);
-    procedure   ApplyStretchMode(const AHeight: TFPReportUnits);
     procedure   ApplyHorzTextAlignment;
     procedure   ApplyVertTextAlignment;
     function    GetTextLines: TStrings;
@@ -3740,15 +3748,7 @@ begin
   AddLine(true);
 end;
 
-procedure TFPReportCustomMemo.ApplyStretchMode(const AHeight: TFPReportUnits);
-var
-  j: TFPReportUnits;
-
-  procedure CalcNeededHeight;
-
-  begin
-    j :=((AHeight + LineSpacing) * TextLines.Count) + TextAlignment.TopMargin + TextAlignment.BottomMargin;
-  end;
+procedure TFPReportElement.ApplyStretchMode(const ADesiredHeight: TFPReportUnits);
 
 begin
   if Not Assigned(RTLayout) then
@@ -3761,20 +3761,17 @@ begin
       end;
     smActualHeight:
       begin
-      CalcNeededHeight;
-      RTLayout.Height := j;
+      RTLayout.Height := aDesiredHeight;
       end;
     smActualHeightStretchOnly:
       begin
-      CalcNeededHeight;
-      if j>RTLayout.Height then { only grow height if needed. We don't shrink. }
-        RTLayout.Height := j;
+      if aDesiredHeight>RTLayout.Height then { only grow height if needed. We don't shrink. }
+        RTLayout.Height := aDesiredHeight;
       end;
     smActualHeightShrinkOnly:
       begin
-      CalcNeededHeight;
-      if j<RTLayout.Height then { only shrink height if needed. We don't grow. }
-        RTLayout.Height := j;
+      if aDesiredHeight<RTLayout.Height then { only shrink height if needed. We don't grow. }
+        RTLayout.Height := ADesiredHeight;
       end;
   end;
 end;
@@ -4555,8 +4552,17 @@ begin
 end;
 
 procedure TFPReportCustomMemo.RecalcLayout;
+
+  Function CalcNeededHeight(aHeight : TFPReportUnits) : TFPReportUnits;
+
+  begin
+    Result :=((AHeight + LineSpacing) * TextLines.Count) + TextAlignment.TopMargin + TextAlignment.BottomMargin;
+  end;
+
 var
   h: TFPReportUnits;
+
+
 begin
   FTextBlockList.Clear;
   FCurTextBlock := nil;
@@ -4571,7 +4577,7 @@ begin
     FTextLines.Add(Text);
 
   if StretchMode <> smDontStretch then
-    ApplyStretchMode(h);
+    ApplyStretchMode(CalcNeededHeight(h));
 
   PrepareTextBlocks;
   ApplyVertTextAlignment;
@@ -8443,20 +8449,23 @@ begin
     end;
 end;
 
-procedure TFPReportCustomBand.ApplyStretchMode;
+Function TFPReportCustomBand.CalcDesiredHeight : TFPReportUnits;
+
 var
-  h: TFPReportUnits;
+  R,H: TFPReportUnits;
   c: TFPReportElement;
   i: integer;
+
 begin
-  h := RTLayout.Height;
+  R := 0;
   for i := 0 to ChildCount-1 do
-  begin
-    c := Child[i];
-    if c.RTLayout.Top + c.RTLayout.Height > h then
-      h := c.RTLayout.Top + c.RTLayout.Height;
-  end;
-  RTLayout.Height := h;
+    begin
+    c:=Child[i];
+    h:=c.RTLayout.Top + c.RTLayout.Height;
+    if H>R then
+      R:=H;
+    end;
+  Result:=R;
 end;
 
 procedure TFPReportCustomBand.SetFont(AValue: TFPReportFont);
@@ -8576,7 +8585,7 @@ begin
       RemoveChild(Child[i]);
   inherited RecalcLayout;
   if StretchMode <> smDontStretch then
-    ApplyStretchMode;
+    ApplyStretchMode(CalcDesiredHeight);
 end;
 
 procedure TFPReportCustomBand.Assign(Source: TPersistent);