热门帖子:我接受了答案,但这对我不起作用。我将发布a new question,强调Delphi 7.感谢所有提供了一些好输入的人
我在一小时内每隔一秒进行一次测量。
我之前有一个问题,即更新TStringGrid需要45秒才能达到“比眼睛看得更快”。部分是通过移动循环的一些计算和数据库相关的功能,但是 - 令我惊讶的是 - 真正产生差异的变化是在循环之前将strindgrid的rowCount设置为3600而不是在循环内增加它。
现在我和TChart有类似的问题。也许如果我尝试预先分配图表?所以,我可以Chart1.Series[0].Count := 3600
,但我不能使用AddXy()
或Add()
,那么我将如何明确地设置系列值?
我有一个非常简单的图表,在y轴上有浮点数,在x轴上有小时:秒
任何人都可以提供帮助,或建议其他方法来加快图表绘制速度吗?
更新:有些人建议使用TFastLineSeries
,但我不知道如何使用。
啊哈 - 双击图表,显示所有系列,选择一个&点击更改
答案 0 :(得分:5)
您可以在Steema website
上找到有关快速制图的“官方”建议答案 1 :(得分: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选项:
答案 2 :(得分:2)
我想对Michael Schmooks的回答发表评论。使用高(XValues)设置系列的计数值会导致数组中的最后一项不显示。这是因为高(XValues)返回数组的最高索引,而不是数组的大小。
当然,只有在恰好添加非常低的项目时才会注意到这一点。
Chart.Series[0].XValues.Count := high(XValues) + 1;