TAChart: Add TChartListbox.OnAddSeries event

git-svn-id: trunk@31659 -
This commit is contained in:
ask 2011-07-10 10:57:31 +00:00
parent ad6ec6e704
commit d67172d19f
3 changed files with 41 additions and 17 deletions

View File

@ -108,6 +108,7 @@ object Form1: TForm1
Top = 0
Width = 138
Chart = Chart
OnAddSeries = ChartListboxAddSeries
OnCheckboxClick = ChartListboxCheckboxClick
OnItemClick = ChartListboxItemClick
OnSeriesIconDblClick = ChartListboxSeriesIconDblClick

View File

@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, TASources, TASeries, TAGraph, CheckLst, Spin, ComCtrls,
ExtCtrls, StdCtrls, FileUtil, Forms, Controls, Graphics, Dialogs,
TAChartListbox;
TAChartListbox, TACustomSeries, TALegend;
type
@ -48,13 +48,15 @@ type
procedure CbShowSeriesIconChange(Sender: TObject);
procedure CbCheckStyleChange(Sender: TObject);
procedure CbKeepSeriesOutChange(Sender: TObject);
procedure ChartListboxAddSeries(ASender: TChartListbox;
ASeries: TCustomChartSeries; AItems: TChartLegendItems;
var ASkip: Boolean);
procedure EdColumnsChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ChartListboxCheckboxClick(Sender: TObject; Index: Integer);
procedure ChartListboxClick(Sender: TObject);
procedure ChartListboxItemClick(Sender: TObject; Index: Integer);
procedure ChartListboxSeriesIconDblClick(Sender: TObject; Index: Integer);
procedure ChartListboxPopulate(Sender: TObject);
private
procedure CreateData;
end;
@ -120,12 +122,6 @@ begin
[ItemIndex, Series[ItemIndex].Title]));
end;
procedure TForm1.ChartListboxPopulate(Sender: TObject);
begin
ChartListbox.RemoveSeries(SinSeries);
ChartListbox.RemoveSeries(CosSeries);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateData;
@ -154,6 +150,13 @@ begin
Options := Options - [cloShowIcons];
end;
procedure TForm1.ChartListboxAddSeries(ASender: TChartListbox;
ASeries: TCustomChartSeries; AItems: TChartLegendItems; var ASkip: Boolean);
begin
ASkip := CbKeepSeriesOut.Checked and
((ASeries = SinSeries) or (ASeries = CosSeries));
end;
procedure TForm1.CbCheckStyleChange(Sender:TObject);
begin
if CbCheckStyle.Checked then
@ -164,13 +167,7 @@ end;
procedure TForm1.CbKeepSeriesOutChange(Sender: TObject);
begin
if CbKeepSeriesOut.Checked then begin
ChartListbox.OnPopulate := @ChartListboxPopulate;
ChartListbox.RemoveSeries(SinSeries);
ChartListbox.RemoveSeries(CosSeries);
end
else
ChartListbox.OnPopulate := nil;
ChartListbox.SeriesChanged(Self);
end;
procedure TForm1.EdColumnsChange(Sender: TObject);

View File

@ -36,9 +36,16 @@ uses
TAChartUtils, TACustomSeries, TALegend, TAGraph;
type
TChartListbox = class;
TChartListboxIndexEvent = procedure (
ASender: TObject; AIndex: Integer) of object;
TChartListboxAddSeriesEvent = procedure (
ASender: TChartListbox; ASeries: TCustomChartSeries;
AItems: TChartLegendItems; var ASkip: Boolean
) of object;
TCheckBoxesStyle = (cbsCheckbox, cbsRadiobutton);
TChartListOption = (cloShowCheckboxes, cloShowIcons);
@ -55,6 +62,7 @@ type
FLegendItems: TChartLegendItems;
FListener: TListener;
FLockCount: Integer;
FOnAddSeries: TChartListboxAddSeriesEvent;
FOnCheckboxClick: TChartListboxIndexEvent;
FOnItemClick: TChartListboxIndexEvent;
FOnPopulate: TNotifyEvent;
@ -65,10 +73,10 @@ type
function GetLegendItem(AIndex: Integer): TLegendItem;
function GetSeries(AIndex: Integer): TCustomChartSeries;
function GetSeriesCount: Integer;
procedure SeriesChanged(ASender: TObject);
procedure SetChart(AValue: TChart);
procedure SetChecked(AIndex: Integer; AValue: Boolean);
procedure SetCheckStyle(AValue: TCheckBoxesStyle);
procedure SetOnAddSeries(AValue: TChartListboxAddSeriesEvent);
procedure SetOnPopulate(AValue: TNotifyEvent);
procedure SetOptions(AValue: TChartListOptions);
@ -98,6 +106,8 @@ type
function FindSeriesIndex(ASeries: TCustomChartSeries): Integer;
procedure MeasureItem(AIndex: Integer; var AHeight: Integer); override;
procedure RemoveSeries(ASeries: TCustomChartSeries);
procedure SeriesChanged(ASender: TObject);
property Checked[AIndex: Integer]: Boolean read GetChecked write SetChecked;
property Series[AIndex: Integer]: TCustomChartSeries read GetSeries;
property SeriesCount: Integer read GetSeriesCount;
@ -109,6 +119,8 @@ type
property Options: TChartListOptions
read FOptions write SetOptions default SHOW_ALL;
published
property OnAddSeries: TChartListboxAddSeriesEvent
read FOnAddSeries write SetOnAddSeries;
property OnCheckboxClick: TChartListboxIndexEvent
read FOnCheckboxClick write FOnCheckboxClick;
property OnItemClick: TChartListboxIndexEvent
@ -254,13 +266,20 @@ function TChartListbox.CreateLegendItems: TChartLegendItems;
a single legend item is used }
var
i: Integer;
skip: Boolean;
begin
Result := TChartLegendItems.Create;
try
if FChart = nil then exit;
for i := 0 to FChart.SeriesCount - 1 do
if FChart.Series[i] is TCustomChartSeries then
if FChart.Series[i] is TCustomChartSeries then begin
if Assigned(OnAddSeries) then begin
skip := false;
FOnAddSeries(Self, TCustomChartSeries(FChart.Series[i]), Result, skip);
if skip then continue;
end;
TCustomChartSeries(FChart.Series[i]).GetSingleLegendItem(Result);
end;
except
FreeAndNil(Result);
raise;
@ -551,6 +570,13 @@ begin
Invalidate;
end;
procedure TChartListbox.SetOnAddSeries(AValue: TChartListboxAddSeriesEvent);
begin
if TMethod(FOnAddSeries) = TMethod(AValue) then exit;
FOnAddSeries := AValue;
Populate;
end;
procedure TChartListbox.SetOnPopulate(AValue: TNotifyEvent);
begin
if TMethod(FOnPopulate) = TMethod(AValue) then exit;