我在购买之前尝试使用TeeChart
软件,并从他们的网站直接到这里寻求支持。
我试图使用TScrollPagerTool
来解决这个问题,因为它似乎非常适合我想要实现的目标,但是在调整大小时我遇到了性能问题。
在图表的resize事件中,如果您使用此滚动工具,建议添加以下行:
ScrollPagerTool.Series := Chart1.Series[0];
我不知道为什么你必须重新分配系列,但如果没有它,图表将不会调整大小。此外,该行有效地再次添加了Series,这意味着我现在有两倍的系列,下一次调整大小,系列的3倍等等,因此在调整几次后滚动会出现性能问题。
有人可以告诉我,我这样做是对吗还是替代方法吗?
如果需要,我可以发布更多代码。
答案 0 :(得分:0)
首先请注意,TScrollPagerTool
使用TSubChartTool
并在其中包含主系列的克隆。这就是分配Series
时设置SubChart的原因,因为没有系列就没有意义。
在某些TeeChart版本中,当您为工具指定系列时,SubChart需要已绘制主图表,以便计算每个图表应使用的空间(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;
<强> BUG:强>
我已经看到实际上有一个错误,正如你所说。在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
来调整procedure TForm1.Chart1Resize(Sender: TObject);
begin
scrollPager1.SetUpScrollPager;
end;
,而无需添加或删除系列。
OnResize
解决方法:强>
同时,对于实际版本,您仍然可以删除SubChart中的所有系列,并使用Series属性克隆源系列,所有这些都在procedure TForm1.Chart1Resize(Sender: TObject);
begin
scrollPager1.SubChartTChart.RemoveAllSeries;
scrollPager1.Series:=Chart1[0];
end;
事件中:
SubChartTChart
相关功能:
如何在ScollPager中拥有多个系列?您可以使用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)
这就是为什么我还添加了一个新的 for i:=0 to 4 do
begin
Chart1.AddSeries(TLineSeries).FillSampleValues;
scrollPager1.AddSeries(Chart1[i]);
end;
方法。使用它向ScrollPager添加几个系列:
{{1}}