首先注意TScrollPagerTool
使用 aTSubChartTool
和其中的主要系列的克隆。这就是为什么 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
公开了,所以这将是在OnResize
事件中调用以调整ChartRect
s 而无需添加或删除系列的人。
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
物业中的一个系列。所以它变得有点棘手:
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;