3

热门帖子:我已经接受了一个答案,但它对我不起作用。我将发布一个新问题,强调 Delphi 7。感谢所有提供良好意见的人


我在一小时内每隔一秒进行一次测量。

我有一个先前的问题,它需要 45 秒来更新 TStringGrid 并设法将其降低到“比眼睛看得更快”。部分是通过移动循环的一些计算和数据库相关功能,但是 - 令我惊讶的是 - 真正产生差异的变化是在循环之前将 strindgrid 的 rowCount 设置为 3600,而不是在循环内增加它。

现在我对 TChart 也有类似的问题。也许如果我尝试预分配图表?所以,我可以Chart1.Series[0].Count := 3600,但我不能使用AddXy()or Add(),那么我将如何明确设置系列值?

我有一个非常简单的图表,y 轴上有浮点数,x 轴上有小时:秒

任何人都可以提供帮助或建议另一种加快图表绘制速度的方法吗?


更新:有几个建议使用TFastLineSeries,但我不明白如何。

啊哈 - 双击图表,显示所有系列,选择一个并单击更改

4

3 回答 3

5

您可以在Steema 网站上找到有关快速图表的“官方”建议

于 2011-01-22T12:31:07.580 回答
4

我设法在眨眼之间绘制了数百万个数据点。我是这样做的:您可以做的是为 X 和 Y 值创建两个数组,用您的值填充它们,然后将这些数组填充到您的图表中。例如:

var
  XValues, YValues: array of double; 
begin

  SetLength(XValues, numberofValues);
  SetLength(YValues, numberofValues);

  for ix := 0 to numberofValues - 1 do 
  begin
    XValues[ix] := ...your values
    YValues[ix] := ...your values
  end;

  Chart.Series[0].XValues.Value := TChartValues(XValues);
  Chart.Series[0].XValues.Count := high(XValues);
  Chart.Series[0].XValues.Modified := true;
  Chart.Series[0].YValues.Value := TChartValues(YValues);
  Chart.Series[0].YValues.Count := high(YValues);
  Chart.Series[0].YValues.Modified := True;

还可以加快绘图速度的是使用 TFastLineSeries 而不是常规的 TLineSeries。使用 FastlineSeries 时,您还拥有 DrawAllPoints 属性。当设置为 false 时,绘图会更快。然后,TChart 将跳过与屏幕上其他数据点共享相同 X 位置的数据点。它只会画出这些的第一点。

这是您找到 DrawAllPoints 选项的地方:替代文字

于 2011-01-22T15:21:43.073 回答
2

我只想评论 Michael Schmooks 的回答。使用 High(XValues) 设置系列的 Count 值会导致不显示数组中的最后一项。这是因为 high(XValues) 返回数组的最高索引,而不是数组的大小。

当然,只有在恰好添加了非常低的 nr 项时才会注意到这一点。

Chart.Series[0].XValues.Count := high(XValues) + 1;
于 2011-07-15T07:57:48.157 回答