To better control symbol placement for dense data sets, I create a LineSeries, a FastLineSeries and a PointSeries for each set of data. The LineSeries is used only for the legend, while the other two series show the line and the points respectively. I have a lot of custom code to format the resulting graph, but also make ChartEditor available so advanced users can "tweak" the graph to their own preference.
When I open ChartEditor, all 3 series are displayed. I have attempted to hide the FastLine and Point series with the following code:
procedure TformMain.acChartEditorExecute(Sender: TObject);
begin
PBQuickGraphMain.HideFastPointSeriesInEditor;
ChartEditor.Execute;
end;
procedure TPBQuickGraph.HideFastPointSeriesInEditor;
var
i: integer;
begin
for i:=0 to Dependent1Collection.SeriesList.Count-1 do
begin
TUnitFastLineSeries(Dependent1Collection.SeriesList.Objects).ShowInEditor := false;
TUnitPointSeries(Dependent1Collection.SeriesList.Objects).ShowInEditor := false;
end;
for i:=0 to Dependent2Collection.SeriesList.Count-1 do
begin
TUnitFastLineSeries(Dependent2Collection.SeriesList.Objects).ShowInEditor := false;
TUnitPointSeries(Dependent2Collection.SeriesList.Objects).ShowInEditor := false;
end;
end;
The code is unit-aware (e.g. with conversions between m and feet, etc). Dependent1Collection and Dependent2Collection are related to two dependent axes, each plotting data of a separate unit type.
This code has no effect on ChartEditor as seen in attachment. Any ideas what ShowInEditor fails would be appreciated.
Hiding series in Chart Editor
Hiding series in Chart Editor
- Attachments
-
- Chart_Editor_Example.jpg (101.05 KiB) Viewed 7136 times
Re: Hiding series in Chart Editor
Further to my previous submission, I see that the HideInEditor code does not hide the FastLine and Point series but does hide the LineSeries. Without the code, all 3 series are shown in the editor.
Re: Hiding series in Chart Editor
Hi,
I've made a simple example trying to reproduce your situation (all in a single unit) and it seems it works fine for me here, if I understood correctly what you are trying to achieve.
The series with data, TLineSeries, are drawn in the chart and shown in the editor but hidden in the legend
The series without data, TFastLineSeries and TPointSeries copied (just the title and the color) from the TLineSeries, are hidden in the editor but shown in the legend.
Isn't it what you are trying to do?
I've made a simple example trying to reproduce your situation (all in a single unit) and it seems it works fine for me here, if I understood correctly what you are trying to achieve.
Code: Select all
uses Series, TeeEdit;
procedure TForm1.FormCreate(Sender: TObject);
procedure CopySettings(FromSeries, ToSeries: TChartSeries);
begin
ToSeries.Title:=FromSeries.Title;
ToSeries.Color:=FromSeries.Color;
ToSeries.ShowInEditor:=false;
end;
var i, count: Integer;
begin
Chart1.View3D:=false;
for i:=0 to 4 do
begin
with Chart1.AddSeries(TLineSeries) as TLineSeries do
begin
FillSampleValues;
Pointer.Visible:=true;
ShowInLegend:=false;
end;
end;
Chart1[0].Title:='Temperatura del pozo';
Chart1[1].Title:='Well Pressure';
Chart1[2].Title:='WHP';
Chart1[3].Title:='Cased Depth';
Chart1[4].Title:='Major Feed';
count:=Chart1.SeriesCount;
for i:=0 to count-1 do
begin
CopySettings(Chart1[i], Chart1.AddSeries(TFastLineSeries));
CopySettings(Chart1[i], Chart1.AddSeries(TPointSeries));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TChartEditor.Create(Self) do
begin
Chart:=Chart1;
Execute;
end;
end;
The series without data, TFastLineSeries and TPointSeries copied (just the title and the color) from the TLineSeries, are hidden in the editor but shown in the legend.
Isn't it what you are trying to do?
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Hiding series in Chart Editor
Hi Yeray
Thanks for your reply. Note that all 3 series have the same data and settings (line color, symbol, line type, etc) as appropriate. The LineSeries is used only to show the legend - its DataSource is set to nil just before the chart is drawn so no data is plotted. The legends of the FastLineSeries and the PointSeries are hidden but the data is plottted. Doing it this way means that I can control the point frequency (for example draw every 10th symbol in the series) while a FastLineSeries is plotted correctly for non-solid lines and dense data, at least for line width = 0 or 1.
However I have found the source of the problem. I had created the set of 3 series as objects in the same Series List (TStringList), as follows:
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitLineSeries.Create(Owner));
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitFastLineSeries.Create(Owner));
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitPointSeries.Create(Owner));
Using 3 separate series lists as follows solved the problem:
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitLineSeries.Create(Owner));
Dependent1Collection.SeriesListF.AddObject(sTitle,TUnitFastLineSeries.Create(Owner));
Dependent1Collection.SeriesListP.AddObject(sTitle,TUnitPointSeries.Create(Owner));
Thanks and regards
Errol
Thanks for your reply. Note that all 3 series have the same data and settings (line color, symbol, line type, etc) as appropriate. The LineSeries is used only to show the legend - its DataSource is set to nil just before the chart is drawn so no data is plotted. The legends of the FastLineSeries and the PointSeries are hidden but the data is plottted. Doing it this way means that I can control the point frequency (for example draw every 10th symbol in the series) while a FastLineSeries is plotted correctly for non-solid lines and dense data, at least for line width = 0 or 1.
However I have found the source of the problem. I had created the set of 3 series as objects in the same Series List (TStringList), as follows:
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitLineSeries.Create(Owner));
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitFastLineSeries.Create(Owner));
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitPointSeries.Create(Owner));
Using 3 separate series lists as follows solved the problem:
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitLineSeries.Create(Owner));
Dependent1Collection.SeriesListF.AddObject(sTitle,TUnitFastLineSeries.Create(Owner));
Dependent1Collection.SeriesListP.AddObject(sTitle,TUnitPointSeries.Create(Owner));
Thanks and regards
Errol
Re: Hiding series in Chart Editor
Hi Errol,
I'm glad to hear you found how to make it work
I'm glad to hear you found how to make it work
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |