0

TeeChart在购买之前正在试用该软件,并被从他们的网站定向到此处以获得支持。我正在尝试使用它,TScrollPagerTool因为它似乎非常适合我想要实现的目标,但是在调整大小时我遇到了性能问题。如果您使用此滚动工具,建议在图表的调整大小事件中添加以下行:

ScrollPagerTool.Series := Chart1.Series[0];

我不知道为什么你必须重新分配系列,但没有它图表不会调整大小。此外,该行有效地再次添加了系列,这意味着我现在有两倍的系列和下一次调整大小,3 倍的系列等等,因此在几次调整大小后我遇到了滚动性能问题。

有人可以告诉我我这样做是对的还是这里的替代方法?

如果需要,我可以发布更多代码。

4

1 回答 1

0

首先注意TScrollPagerTool使用 aTSubChartTool和其中的主要系列的克隆。这就是为什么 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公开了,所以这将是在OnResize事件中调用以调整ChartRects 而无需添加或删除系列的人。

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;
于 2013-08-19T13:48:57.327 回答