Page 1 of 1
Function series management
Posted: Fri May 11, 2007 8:42 am
by 9244858
Hello,
I want to know if there is a way of tracking down the series related to a
certain function I have defined at runtime.
For example, suppose I need to add and then remove a Bollinger Bands
function. Adding it is easy, but this function would generate two
additional line series to my chart. At a later point I would need to
remove it from the chart along with the corresponding line series. How can
I identify which series are related to a particular instance of Bollinger
Bands function?
I know the chart can do that, as when I look at a series it shows what
function, along with proper parameters represents the model for it. How
can I do that in code? There is nothing like "GetFunction" method as it
with "SetFunction" for a series...
Thank you,
Cristina
Posted: Fri May 11, 2007 9:48 am
by narcis
Hi Cristina,
As
internal series are not shown in the legend and easy way to achieve what you request would be doing something like this:
Code: Select all
uses Series, StatChar;
procedure TForm1.FormCreate(Sender: TObject);
var tmpBarSeries1,tmpBarSeries2:TBarSeries;
tmpLineSeries:TLineSeries;
begin
With Chart1 do
begin
//Add 2 data Series
tmpBarSeries1:=TBarSeries.Create(self);
tmpBarSeries2:=TBarSeries.Create(self);
AddSeries(tmpBarSeries1);
AddSeries(tmpBarSeries2);
//Populate them with data (here random)
tmpBarSeries1.FillSampleValues(10);
tmpBarSeries2.FillSampleValues(10);
//Add a series to be used for an Average Function
tmpLineSeries:=TLineSeries.Create(self);
AddSeries(tmpLineSeries);
//Define the Function Type for the new Series
tmpLineSeries.SetFunction(TBollingerFunction.Create(self));
//Define the Datasource for the new Function Series
//Datasource accepts the Series titles of the other 2 Series
tmpLineSeries.DataSources.Clear;
tmpLineSeries.DataSources.Add( tmpBarSeries1 );
tmpLineSeries.DataSources.Add( tmpBarSeries2 );
// *Note - When populating your input Series manually you will need to
// use the Checkdatasource method
// - See the section entitled 'Defining a Datasource'
//Change the Period of the Function so that it groups averages
//every 2 Points
tmpLineSeries.FunctionType.Period := 2;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i:=Chart1.SeriesCount-1 downto 0 do
if ((Chart1[i].FunctionType is TBollingerFunction) or
not (Chart1[i].ShowInLegend))then
Chart1.RemoveSeries(i);
end;
Posted: Sat May 19, 2007 8:21 pm
by 9244858
Hello,
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i:=Chart1.SeriesCount-1 downto 0 do
if ((Chart1.FunctionType is TBollingerFunction) or
not (Chart1.ShowInLegend))then
Chart1.RemoveSeries(i);
end;
This is not working. I've tried like that (my code is in Borland C++ and I transformed it in Delphi, hereunder) :
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i:=Chart1.Series.Count-1 downto 0 do
if (Chart1.Series.ShowInLegend) then
Chart1.RemoveSeries(i);
end;
I observed I didn't get Chart1.Series.ShowInLegend = false and in series.count it is not included the second series.
You can give me examples in Delphi because I know Delphi, too.
Please advice.
Thank you,
Cristina
Posted: Mon May 21, 2007 7:45 am
by narcis
Hello Christina,
This is not working. I've tried like that (my code is in Borland C++ and I transformed it in Delphi, hereunder) :
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i:=Chart1.Series.Count-1 downto 0 do
if (Chart1.Series.ShowInLegend) then
Chart1.RemoveSeries(i);
end;
I observed I didn't get Chart1.Series.ShowInLegend = false and in series.count it is not included the second series.
I guess you missed the not in the if statement as I posted. However, the code I posted works fine for me here. If the problem persists could you please send us a simple example project we can run "as-is" to reproduce the problem here and let us know which TeeChart version are you using?
You can post your files at news://www.steema.net/steema.public.attachments newsgroup or at our upload page.
Posted: Mon May 21, 2007 9:16 am
by 9244858
Hello,
Sorry,
In fact I assumed that the type for internal series is TLineSeries. It seems do not be. I had another such of condition above and this was the reason.
Thank you,
Cristina