diff --git a/components/tachart/tagraph.pas b/components/tachart/tagraph.pas index 43749eebb9..73d62a908d 100644 --- a/components/tachart/tagraph.pas +++ b/components/tachart/tagraph.pas @@ -746,10 +746,6 @@ var begin Prepare; - ADrawer.DrawingBegin(ARect); - ADrawer.SetAntialiasingMode(AntialiasingMode); - Clear(ADrawer, ARect); - FClipRect := ARect; with MarginsExternal do begin FClipRect.Left += Left; @@ -759,8 +755,8 @@ begin end; with ClipRect do begin; - FTitle.Draw(ADrawer, 1, Left, Right, Top); - FFoot.Draw(ADrawer, -1, Left, Right, Bottom); + FTitle.Measure(ADrawer, 1, Left, Right, Top); + FFoot.Measure(ADrawer, -1, Left, Right, Bottom); end; ldd.FItems := nil; @@ -768,6 +764,12 @@ begin ldd := PrepareLegend(ADrawer, FClipRect); try PrepareAxis(ADrawer); + + ADrawer.DrawingBegin(ARect); + ADrawer.SetAntialiasingMode(AntialiasingMode); + Clear(ADrawer, ARect); + FTitle.Draw(ADrawer); + FFoot.Draw(ADrawer); DrawBackWall(ADrawer); DisplaySeries(ADrawer); if Legend.Visible then diff --git a/components/tachart/tatextelements.pas b/components/tachart/tatextelements.pas index 99c2ae95b4..0e92c7fd34 100644 --- a/components/tachart/tatextelements.pas +++ b/components/tachart/tatextelements.pas @@ -119,6 +119,7 @@ type TChartTitle = class(TChartTextElement) strict private FBrush: TBrush; + FCenter: TPoint; FFont: TFont; FFrame: TChartTitleFramePen; FMargin: TChartDistance; @@ -138,7 +139,8 @@ type destructor Destroy; override; public procedure Assign(ASource: TPersistent); override; - procedure Draw( + procedure Draw(ADrawer: IChartDrawer); + procedure Measure( ADrawer: IChartDrawer; ADir, ALeft, ARight: Integer; var AY: Integer); published property Alignment default taCenter; @@ -510,22 +512,12 @@ begin inherited; end; -procedure TChartTitle.Draw( - ADrawer: IChartDrawer; ADir, ALeft, ARight: Integer; var AY: Integer); +procedure TChartTitle.Draw(ADrawer: IChartDrawer); var - p, ptSize: TPoint; dummy: TPointArray = nil; begin if not Visible or (Text.Count = 0) then exit; - ptSize := MeasureLabel(ADrawer, Text.Text); - case Alignment of - taLeftJustify: p.X := ALeft + ptSize.X div 2; - taRightJustify: p.X := ARight - ptSize.X div 2; - taCenter: p.X := (ALeft + ARight) div 2; - end; - p.Y := AY + ADir * ptSize.Y div 2; - DrawLabel(ADrawer, p, p, Text.Text, dummy); - AY += ADir * (ptSize.Y + Margin); + DrawLabel(ADrawer, FCenter, FCenter, Text.Text, dummy); end; function TChartTitle.GetFrame: TChartPen; @@ -543,6 +535,22 @@ begin Result := Font; end; +procedure TChartTitle.Measure(ADrawer: IChartDrawer; + ADir, ALeft, ARight: Integer; var AY: Integer); +var + ptSize: TPoint; +begin + if not Visible or (Text.Count = 0) then exit; + ptSize := MeasureLabel(ADrawer, Text.Text); + case Alignment of + taLeftJustify: FCenter.X := ALeft + ptSize.X div 2; + taRightJustify: FCenter.X := ARight - ptSize.X div 2; + taCenter: FCenter.X := (ALeft + ARight) div 2; + end; + FCenter.Y := AY + ADir * ptSize.Y div 2; + AY += ADir * (ptSize.Y + Margin); +end; + procedure TChartTitle.SetBrush(AValue: TBrush); begin FBrush.Assign(AValue);