メインシリーズのクローンをTScrollPagerTool
使用する最初の注記。TSubChartTool
が割り当てられたときに SubChart が設定されるのはそのSeries
ためです。シリーズがないと意味がないからです。
一部の TeeChart バージョンでは、各チャートが使用する必要があるスペース ( ChartRect
s) を計算するために、シリーズをツールに割り当てるときにサブチャートにメイン チャートが既に描画されている必要があります。そのため、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 を調整できます。OnResize
ChartRect
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;