|
@@ -703,6 +703,7 @@ type
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure BeginUpdate;
|
|
procedure BeginUpdate;
|
|
procedure EndUpdate;
|
|
procedure EndUpdate;
|
|
|
|
+ Procedure Validate(aErrors : TStrings); virtual;
|
|
function EvaluateVisibility : boolean; virtual;
|
|
function EvaluateVisibility : boolean; virtual;
|
|
property Parent: TFPReportElement read FParent write SetParent;
|
|
property Parent: TFPReportElement read FParent write SetParent;
|
|
Property Report : TFPCustomReport read GetReport;
|
|
Property Report : TFPCustomReport read GetReport;
|
|
@@ -735,6 +736,7 @@ type
|
|
procedure RecalcLayout; override;
|
|
procedure RecalcLayout; override;
|
|
public
|
|
public
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
|
|
+ Procedure Validate(aErrors : TStrings); override;
|
|
// called when the designer starts editing this component .
|
|
// called when the designer starts editing this component .
|
|
Procedure StartDesigning; override;
|
|
Procedure StartDesigning; override;
|
|
// called when the designer ends editing this component .
|
|
// called when the designer ends editing this component .
|
|
@@ -852,7 +854,6 @@ type
|
|
constructor Create(AOwner: TComponent); override;
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
Function PageIndex : Integer;
|
|
Function PageIndex : Integer;
|
|
- Procedure Validate(aErrors : TStrings);
|
|
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure ReadElement(AReader: TFPReportStreamer); override;
|
|
procedure ReadElement(AReader: TFPReportStreamer); override;
|
|
function FindBand(ABand: TFPReportBandClass): TFPReportCustomBand;
|
|
function FindBand(ABand: TFPReportBandClass): TFPReportCustomBand;
|
|
@@ -941,7 +942,7 @@ type
|
|
public
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
- Procedure Validate(aErrors : TStrings); virtual;
|
|
|
|
|
|
+ Procedure Validate(aErrors : TStrings); override;
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure FixupReference(PN, PV: String; C: TFPReportElement); override;
|
|
procedure FixupReference(PN, PV: String; C: TFPReportElement); override;
|
|
Class Function ReportBandType : TFPReportBandType; virtual;
|
|
Class Function ReportBandType : TFPReportBandType; virtual;
|
|
@@ -1028,10 +1029,13 @@ type
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
+ { TFPReportCustomChildBand }
|
|
|
|
+
|
|
TFPReportCustomChildBand = class(TFPReportCustomBandWithData)
|
|
TFPReportCustomChildBand = class(TFPReportCustomBandWithData)
|
|
protected
|
|
protected
|
|
function GetReportBandName: string; override;
|
|
function GetReportBandName: string; override;
|
|
Public
|
|
Public
|
|
|
|
+ Procedure Validate(aErrors : TStrings); override;
|
|
Class Function ReportBandType : TFPReportBandType; override;
|
|
Class Function ReportBandType : TFPReportBandType; override;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -2242,8 +2246,9 @@ resourcestring
|
|
SErrFontNotFound = 'Font not found: "%s"';
|
|
SErrFontNotFound = 'Font not found: "%s"';
|
|
SErrNeedPages = 'Need at least 1 report page.';
|
|
SErrNeedPages = 'Need at least 1 report page.';
|
|
SErrInvalidReport = 'Invalid report, detected %d errors:'+sLineBreak+'%s';
|
|
SErrInvalidReport = 'Invalid report, detected %d errors:'+sLineBreak+'%s';
|
|
- SErrEmptyGroupExpression = 'Group header %s needs a group expression';
|
|
|
|
-
|
|
|
|
|
|
+ SErrEmptyGroupExpression = 'Group header "%s" needs a group expression';
|
|
|
|
+ SErrNoPageForBand = 'No page for band "%s".';
|
|
|
|
+ SErrDanglingChild = 'Child band "%s" is not used by other bands.';
|
|
|
|
|
|
SErrRegisterEmptyExporter = 'Attempt to register empty exporter';
|
|
SErrRegisterEmptyExporter = 'Attempt to register empty exporter';
|
|
SErrRegisterDuplicateExporter = 'Attempt to register duplicate exporter: "%s"';
|
|
SErrRegisterDuplicateExporter = 'Attempt to register duplicate exporter: "%s"';
|
|
@@ -5438,6 +5443,29 @@ begin
|
|
Result := 'ChildBand';
|
|
Result := 'ChildBand';
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TFPReportCustomChildBand.Validate(aErrors: TStrings);
|
|
|
|
+
|
|
|
|
+Var
|
|
|
|
+ I : integer;
|
|
|
|
+ B : TFPReportCustomBand;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ inherited Validate(aErrors);
|
|
|
|
+ if Not Assigned(Page) then
|
|
|
|
+ exit;
|
|
|
|
+ I:=0;
|
|
|
|
+ B:=Nil;
|
|
|
|
+ While (B=Nil) and (I<Page.BandCount) do
|
|
|
|
+ begin
|
|
|
|
+ B:=Page.Bands[i];
|
|
|
|
+ if B.ChildBand<>Self then
|
|
|
|
+ B:=Nil;
|
|
|
|
+ Inc(I);
|
|
|
|
+ end;
|
|
|
|
+ if (B=Nil) then
|
|
|
|
+ aErrors.Add(SErrDanglingChild,[Name]);
|
|
|
|
+end;
|
|
|
|
+
|
|
class function TFPReportCustomChildBand.ReportBandType: TFPReportBandType;
|
|
class function TFPReportCustomChildBand.ReportBandType: TFPReportBandType;
|
|
begin
|
|
begin
|
|
Result:=btChild;
|
|
Result:=btChild;
|
|
@@ -6790,6 +6818,11 @@ begin
|
|
DoChanged;
|
|
DoChanged;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TFPReportElement.Validate(aErrors: TStrings);
|
|
|
|
+begin
|
|
|
|
+ // Do nothing
|
|
|
|
+end;
|
|
|
|
+
|
|
{ TFPReportElementWithChildren }
|
|
{ TFPReportElementWithChildren }
|
|
|
|
|
|
function TFPReportElementWithChildren.GetChild(AIndex: integer): TFPReportElement;
|
|
function TFPReportElementWithChildren.GetChild(AIndex: integer): TFPReportElement;
|
|
@@ -6884,6 +6917,17 @@ begin
|
|
inherited Destroy;
|
|
inherited Destroy;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TFPReportElementWithChildren.Validate(aErrors: TStrings);
|
|
|
|
+
|
|
|
|
+Var
|
|
|
|
+ I : Integer;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ inherited Validate(aErrors);
|
|
|
|
+ For I:=0 to ChildCount-1 do
|
|
|
|
+ Child[i].Validate(aErrors);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TFPReportElementWithChildren.StartDesigning;
|
|
procedure TFPReportElementWithChildren.StartDesigning;
|
|
|
|
|
|
Var
|
|
Var
|
|
@@ -7289,16 +7333,6 @@ begin
|
|
Result:=ComponentIndex;
|
|
Result:=ComponentIndex;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TFPReportCustomPage.Validate(aErrors : TStrings);
|
|
|
|
-
|
|
|
|
-Var
|
|
|
|
- I : integer;
|
|
|
|
-
|
|
|
|
-begin
|
|
|
|
- For I:=0 to BandCount-1 do
|
|
|
|
- Bands[i].Validate(aErrors);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
function TFPReportCustomPage.GetBand(AIndex: integer): TFPReportCustomBand;
|
|
function TFPReportCustomPage.GetBand(AIndex: integer): TFPReportCustomBand;
|
|
begin
|
|
begin
|
|
if Assigned(FBands) then
|
|
if Assigned(FBands) then
|
|
@@ -8710,7 +8744,8 @@ end;
|
|
|
|
|
|
procedure TFPReportCustomBand.Validate(AErrors : TStrings);
|
|
procedure TFPReportCustomBand.Validate(AErrors : TStrings);
|
|
begin
|
|
begin
|
|
- // Do nothing
|
|
|
|
|
|
+ if (Page=Nil) then
|
|
|
|
+ aErrors.Add(SErrNoPageForBand,[Name]);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TFPReportCustomBand.WriteElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement);
|
|
procedure TFPReportCustomBand.WriteElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement);
|