添加TeeChart函数数据源会导致访问冲突

时间:2016-03-30 10:51:42

标签: delphi vcl teechart delphi-10-seattle

我使用的是Delphi 10西雅图订购更新1和TeeChart Standard v2015.15.150420,它与Delphi捆绑在一起。

我将TDBChart组件放在新的VCL应用程序的空白表单上。然后,我在表单的OnCreate事件中使用http://www.teechart.net/docs/teechart/vclfmx/tutorials/UserGuide/Tutorials/tutorial7.htm#AddFunction中的“添加函数”教程中概述的示例代码。使用此代码,一切都按预期工作,我得到两个条形码系列,其中包含样本值和一​​个系列,代表两个条形系列的平均值。

如果我不想要一个由系列表示的平均值,而是通过一个条形系列来表示问题。如果我将TLineSeries更改为TBarSeries并运行该程序,则会在将第一个条形序列作为数据源添加到函数系列(tmpLineSeries)时导致“访问冲突0x0066d665:读取地址0x00000198”,例如。 tmpLineSeries.DataSources.Add( tmpBarSeries1 );

这是问题代码(参见下面的“AV发生在这里”)。请注意,正如所解释的那样,从工作教程示例中更改的唯一代码是已更改为TBarSeries类型而不是TLineSeries类型的tmpLineSeries:

procedure TForm1.FormCreate(Sender: TObject);
var tmpBarSeries1,
    tmpBarSeries2 : TBarSeries;
    tmpLineSeries : TBarSeries;
begin
  //Add 2 data Series

  tmpBarSeries1:=TBarSeries.Create(Self);
  tmpBarSeries2:=TBarSeries.Create(Self);

  DBChart1.AddSeries(tmpBarSeries1);
  DBChart1.AddSeries(tmpBarSeries2);

  //Populate them with data (here random)
  tmpBarSeries1.FillSampleValues(10);
  tmpBarSeries2.FillSampleValues(10);

  //Add a series to be used for an Average Function
  tmpLineSeries:=TBarSeries.Create(Self);
  DBChart1.AddSeries(tmpLineSeries);

  //Define the Function Type for the new Series
  tmpLineSeries.SetFunction(TAverageTeeFunction.Create(Self));

  //Define the Datasource for the new Function Series
  //Datasource accepts the Series titles of the other 2 Series
  tmpLineSeries.DataSources.Clear;
  tmpLineSeries.DataSources.Add( tmpBarSeries1 ); ////// AV occurs here!!!
  tmpLineSeries.DataSources.Add( tmpBarSeries2 );

  //    *Note - When populating your input Series manually you will need to
  //    use the Checkdatasource method
  //    - See the section entitled 'Defining a Datasource'
  //Change the Period of the Function so that it groups averages
  //every 2 Points

  tmpLineSeries.FunctionType.Period := 2;
end;

它似乎是TeeChart中的一个错误,或者我错过了BarSeries所必需的配置步骤,这对于LineSeries来说是不必要的。

任何人都可以看到我做错了什么,或者为错误建议解决方法?我不认为在这个阶段升级到最新版本的TeeChart是一个选项,因为据我所知,这只能通过升级Delphi(我已经在Delphi的最新更新),或者购买TeeChart的独立版本。

1 个答案:

答案 0 :(得分:0)

对我来说这看起来像个错误。我已将其(bug #1484)添加到Steema Software's bugzilla。我能想到的唯一解决方法是将TTeeFunction.Period属性设置为大于零的值,这样就不会执行有问题的代码。例如:

  //workaround
  tmpLineSeries.FunctionType.Period:=1;

  tmpLineSeries.DataSources.Add( tmpBarSeries1 ); ////// AV occurs here!!!
  tmpLineSeries.DataSources.Add( tmpBarSeries2 );

更新:已针对下一个TeeChart版本修复此问题。