界面都是调用下面这个过程的,其它界面调用没问题,
而有一个界面出内存错误,但去掉TLineSeries类型的话就没问题;代码如下:
//图表类型
procedure Change_Chart_Type(PageCntrl: TPageControl; tmpChart: TChartSeries);
begin
  if PageCntrl.ActivePageIndex = 0 then
  begin
    tmpChart.Marks.Style:= smsValue;
    ChangeSeriesType(tmpChart, TBarSeries);
  end
  else if PageCntrl.ActivePageIndex = 1 then
  begin
    tmpChart.Marks.Style:= smsLabel;
    ChangeSeriesType(tmpChart, TPieSeries);
  end
  else if PageCntrl.ActivePageIndex = 2 then
  begin
    tmpChart.Marks.Style:= smsValue;  
    ChangeSeriesType(tmpChart, TLineSeries); //有内存错误
    //ChangeSeriesType(tmpChart, TBarSeries); //无内存错误,但上面已经有了TBarSeries类型
  end;
  
  tmpChart.Active:= true;
  tmpChart.RefreshSeries;
end;

解决方案 »

  1.   

    TLineSeries和TBarSeries类型不能互转,因为来自不同的父类
    TLineSeries, TAreaSeries and the TPointSeries.这三个可以
      

  2.   


    应该是其他部分代码的问题吧? 我刚试了下Bar 和Line可以转换
      

  3.   

    删除后,重新建立,其他同样没问题,
    TLineSeries还是有错误,程序直接死掉。
    代码如下:
      else if PageControl1.ActivePageIndex = 2 then
      begin
        DBChart1.Legend.Visible:= true;    DBChart1.Series[1].Free;
        DBChart1.Series[0].Free;    DBChart1.AddSeries( TLineSeries.Create(Self) );
        DBChart1.AddSeries( TLineSeries.Create(Self) );    tmpChart:= DBChart1.Series[0];
        tmpChart2:= DBChart1.Series[1];    tmpChart.Marks.Style:= smsValue;
        tmpChart2.Marks.Style:= smsValue;    tmpChart.Active:= true;
        tmpChart2.Active:= false;
        //设置dataSource
        Chart_GetShow();
      end;