我使用的是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的独立版本。
答案 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版本修复此问题。