2016-03-30 18 views
0

Delphi ile birlikte gelen Delphi 10 Seattle Subscription Update 1 ve TeeChart Standard v2015.15.150420 kullanıyorum.Bir TeeChart işlevi veri kaynağı eklenmesi erişim ihlaline neden oluyor

Yeni bir VCL uygulamasının boş formuna bir TDBChart bileşeni bırakıyorum. Daha sonra formun OnCreate olayında bulunan http://www.teechart.net/docs/teechart/vclfmx/tutorials/UserGuide/Tutorials/tutorial7.htm#AddFunction adresinde bulunan "Bir İşlev Ekleme" eğitiminde özetlenen örnek kodu kullanıyorum. Bu kod ile her şey gerektiği gibi çalışır ve iki bar serisinin ortalamasını temsil eden örnek değerleri ve bir satır serisi ile doldurulmuş iki çubuk serisi elde ederim.

Ortalama, bir satır dizisiyle değil, bir çubuk dizisiyle temsil edilmesini istemiyorsam sorun oluşuyor. TLineSeries'i bir TBarSeries olarak değiştirir ve programı çalıştırırsam, "0x0066d665 adresindeki erişim ihlali: 0x00000198 adresinin okunmasına" neden olur; ilk çubuk dizisini, işlev dizisine (tmpLineSeries) veri kaynağı olarak ekleme gibi. tmpLineSeries.DataSources.Add(tmpBarSeries1);.

İşte sorun kodu (aşağıdaki "AV burada oluşur"). açıklandığı gibi çalışan öğretici örnekten değişen tek kod oldu unutmayın bir TBarSeries değiştirildi olmuştu tmpLineSeries yerine TLineSeries Çeşidi yazın:

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; 

O TeeChart veya I hatanın ya görünüyor LineSeries için gerekli olmayan BarSeries için gerekli bir yapılandırma adımı eksik.

Hata yaptığımı veya alternatif olarak hata için geçici bir çözüm öneren var mı? TeeChart'ın en son sürümüne yükseltmenin bu aşamada bir seçenek olduğunu düşünmüyorum çünkü anladığım kadarıyla bu sadece Delphi'yi (zaten Delphi'nin en son güncellemesinde olduğumu) veya alternatif olarak satın alarak yapabilir. TeeChart'ın bağımsız sürümü.

cevap

0

Bu bana bir hata gibi görünüyor. Bunu (bug #1484) Steema Software's bugzilla'a ekledim. Düşünebildiğim tek geçici çözüm, TTeeFunction.Period özelliğinin sıfırdan büyük bir değere ayarlanmasıdır, böylece hatalı kod yürütülmez. Örneğin:

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

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

GÜNCELLEME: Bu gelecek TeeChart serbest bırakılması için giderildi.

+0

Teşekkür ederiz! Önerdiğiniz çözüm işe yarıyor. Ayrıca, hatayı bildirdiğiniz ve düzeltildiğiniz için teşekkür ederiz. –

İlgili konular