メインシリーズのクローンをTScrollPagerTool使用する最初の注記。TSubChartToolが割り当てられたときに SubChart が設定されるのはそのSeriesためです。シリーズがないと意味がないからです。
一部の TeeChart バージョンでは、各チャートが使用する必要があるスペース ( ChartRects) を計算するために、シリーズをツールに割り当てるときにサブチャートにメイン チャートが既に描画されている必要があります。そのため、OnResizeイベントでシリーズを割り当てますが、TeeChart VCL では作成時にすべてを行うことができます。
uses Series, TeeScrollPagerTool;
procedure TForm1.FormCreate(Sender: TObject);
begin
Chart1.AddSeries(TLineSeries).FillSampleValues;
(Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool).Series:=Chart1[0];
end;
バグ:
あなたが言ったように、実際にバグがあるのを見ました。イベントでシリーズを割り当ててOnResize、チャートとサブチャートをフォームに合わせてサイズ変更すると、ソース シリーズが何度も複製されるようになりました。
uses Series, TeeScrollPagerTool;
var scrollPager1: TScrollPagerTool;
procedure TForm1.FormCreate(Sender: TObject);
begin
Chart1.Align:=alClient;
scrollPager1:=Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool;
Chart1.AddSeries(TLineSeries).FillSampleValues;
scrollPager1.Series:=Chart1[0];
end;
procedure TForm1.Chart1Resize(Sender: TObject);
begin
scrollPager1.Series:=Chart1[0];
end;
私はそれを修正するためにいくつかの変更を加えました:
次のバージョンでは、Seriesプロパティはサブチャート内のすべてのシリーズを削除し、割り当てられたシリーズを複製します。そのため、何度か呼び出しても、クローンが増えることはありません。また、メイン チャートとサブチャートの両方のSetUpScrollPagerを計算する呼び出しも行います。ChartRect
また、公開したので、シリーズを追加または削除することなく、イベントでSetUpScrollPager呼び出して s を調整できます。OnResizeChartRect
procedure TForm1.Chart1Resize(Sender: TObject);
begin
scrollPager1.SetUpScrollPager;
end;
回避策:
その間、実際のバージョンでは、SubChart 内のすべてのシリーズを削除し、Series プロパティを使用してソース シリーズを複製することができますOnResize。
procedure TForm1.Chart1Resize(Sender: TObject);
begin
scrollPager1.SubChartTChart.RemoveAllSeries;
scrollPager1.Series:=Chart1[0];
end;
関連機能:
ScollPager に複数のシリーズを含める方法は? このSubChartTChartプロパティを使用して、サブチャートにアクセスし、シリーズをサブチャートに追加/サブチャートから削除できます。Seriesただし、プロパティにはまだ 1 つのシリーズが必要です。したがって、少しトリッキーになります。
uses Series, TeeScrollPagerTool;
var scrollPager1: TScrollPagerTool;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
Chart1.Align:=alClient;
scrollPager1:=Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool;
for i:=0 to 4 do
begin
Chart1.AddSeries(TLineSeries).FillSampleValues;
if scrollPager1.Series=nil then
scrollPager1.Series:=Chart1[i]
else
scrollPager1.SubChartTChart.AddSeries(CloneChartSeries(Chart1[i]));
end;
end;
そのため、新しいAddSeries(const Value: TChartSeries)メソッドも追加しました。これを使用して、ScrollPager にいくつかのシリーズを追加します。
for i:=0 to 4 do
begin
Chart1.AddSeries(TLineSeries).FillSampleValues;
scrollPager1.AddSeries(Chart1[i]);
end;