TAChart: Implement legend multiplicity for most series

git-svn-id: trunk@27565 -
This commit is contained in:
ask 2010-10-04 10:13:28 +00:00
parent a1310c5ca4
commit 213a8b5ef1
5 changed files with 32 additions and 6 deletions

View File

@ -50,6 +50,7 @@ object Form1: TForm1
Source = RandomChartSource1
end
object Chart1PieSeries1: TPieSeries
Legend.Multiplicity = lmPoint
Marks.Format = '%1:.2f%%'
Marks.Style = smsPercent
Exploded = True

View File

@ -5,7 +5,8 @@ unit main;
interface
uses
ExtCtrls, Spin, StdCtrls, Forms, TAGraph, TASeries, TASources, Classes, TALegend, Graphics;
ExtCtrls, Spin, StdCtrls, Forms, TAGraph, TASeries, TASources, Classes,
TALegend, Graphics;
type

View File

@ -185,6 +185,7 @@ type
procedure DrawLabels(ACanvas: TCanvas);
function GetLabelDirection(AIndex: Integer): TLabelDirection; virtual;
procedure GetLegendItemsRect(AItems: TChartLegendItems; ABrush: TBrush);
function GetXRange(AX: Double; AIndex: Integer): Double;
procedure PrepareGraphPoints(
const AExtent: TDoubleRect; AFilterByExtent: Boolean);
@ -704,6 +705,21 @@ begin
Result := DIR[IsRotated, GetGraphPointY(AIndex) < 0];
end;
procedure TBasicPointSeries.GetLegendItemsRect(
AItems: TChartLegendItems; ABrush: TBrush);
var
i: Integer;
begin
case Legend.Multiplicity of
lmSingle:
AItems.Add(TLegendItemBrushRect.Create(ABrush, Title));
lmPoint: begin
for i := 0 to Count - 1 do
AItems.Add(TLegendItemColorRect.Create(GetColor(i), FormattedMark(i)));
end;
end;
end;
function TBasicPointSeries.GetNearestPoint(
ADistFunc: TPointDistFunc; const APoint: TPoint;
out AIndex: Integer; out AImg: TPoint; out AValue: TDoublePoint): Boolean;

View File

@ -163,7 +163,7 @@ end;
procedure TBubbleSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemBrushRect.Create(BubbleBrush, Title));
GetLegendItemsRect(AItems, BubbleBrush);
end;
function TBubbleSeries.GetSeriesColor: TColor;
@ -298,7 +298,7 @@ end;
procedure TBoxAndWhiskerSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemBrushRect.Create(BoxBrush, Title));
GetLegendItemsRect(AItems, BoxBrush);
end;
function TBoxAndWhiskerSeries.GetSeriesColor: TColor;

View File

@ -501,6 +501,7 @@ procedure TLineSeries.GetLegendItems(AItems: TChartLegendItems);
var
lp: TPen;
p: TSeriesPointer;
i: Integer;
begin
if LineType = ltNone then
lp := nil
@ -510,7 +511,14 @@ begin
p := Pointer
else
p := nil;
AItems.Add(TLegendItemLinePointer.Create(lp, p, Title));
case Legend.Multiplicity of
lmSingle:
AItems.Add(TLegendItemLinePointer.Create(lp, p, Title));
lmPoint: begin
for i := 0 to Count - 1 do
AItems.Add(TLegendItemLinePointer.Create(lp, p, FormattedMark(i)));
end;
end;
end;
function TLineSeries.GetSeriesColor: TColor;
@ -807,7 +815,7 @@ end;
procedure TBarSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemBrushRect.Create(BarBrush, Title));
GetLegendItemsRect(AItems, BarBrush);
end;
function TBarSeries.GetSeriesColor: TColor;
@ -1131,7 +1139,7 @@ end;
procedure TAreaSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemBrushRect.Create(AreaBrush, Title));
GetLegendItemsRect(AItems, AreaBrush);
end;
function TAreaSeries.GetSeriesColor: TColor;