teeChart 如何实现初始化状态   现有一个teeChart与两个Series (A,B),Series通过外部程序画好存成tee格式文件,传给teeChart装载Load tee,Series A的特点是横坐标的值是从大到小,Series B与A正好相反。  现在我遇到的问题是:若是第一个装载的Series,结果正确,即横坐标的值该从大到小的从大到小,该从小到大的从小到大。但若是第二个装载的Series,结果就不正确,经发现它是保留了第一个装载的Series横坐标的值的大小顺序。  细想一下,可能是这样的:若你的Series本身设置了某个teeChart中Chart属性(如横坐标的值的大小顺序),且teeChart的Chart属性没有被修改过(即没有装载过Series),系统则采用Series本身设置的。一旦装载过Series,即意味着Chart被污染了,下次再装载Series,则不会采用Series的属性,而是沿用上次的状态。  寻求解决方法:Chart有没有一个让其本身恢复初始状态的方法。当然你可能会问:你就在每次装载前手工地设置一下坐标方向不就可以了,但是不行,因为一我不知道要装载Series坐标情况,二不仅是坐标有变动,其它很多属性都有变动,做一个过程一一设置成初始值实在不是一个好方法。谢谢

解决方案 »

  1.   

    在装载第二个series前试试teechart.removeallseries方法。
      

  2.   

    终于有人回答了.To NightCloud() :
    在装载第二个series前试试teechart.removeallseries方法。我刚试了,还是不行。清除它并不能让Chart恢复原有状态,原有状态各位明白我的意思吧,就是从未装载过任何series,也没有手工修改过任何Chart属性时的状态。
      

  3.   

    你用什么方法保存series的?然后用什么方法装载的?
      

  4.   

    保存:
    SaveChartDialog(Chart1);装载:
    var
      tmp : TCustomChart;
    begin
       With OpenDialog3 do
       if Execute then
       begin
         tmp:=TCustomChart(Chart1);
         LoadChartFromFile(tmp,FileName);
         Chart1:=TChart(tmp);
         LoadChartFromFile(TCustomChart(Chart1),FileName);
       end;
    end;
      

  5.   

    我在delphi6中怎么用不了LoadChartFromFile这个方法啊?需要use那个unit?
      

  6.   

    Uses TeeStore, TeeAbout,
     TeeJPEG,
      TeeGIF,
      TeePNG,
      TeePCX,
      TeePDFCanvas,
      TeeSVGCanvas,
      TeePSCanvas,
      TeeVMLCanvas,
      TeeEditPro,
      TeExport,
      TeeDesignOptions, TeeEditCha, TeeGally, TeeEdit,
      TeeTools,
      BubbleCh,
      TeeXML,
      EditChar,
      TeeShape;
    你把这些都加上吧
      

  7.   

    找到解决问题的方法了,就是先把Chart属性值写到WriteComponent一个变量中,装载前再用这个变量恢复一下。
    function TForm1.ComponentToString(Component: TComponent): string;
    var
      BinStream:TMemoryStream;
      StrStream: TStringStream;
      s: string;
    begin
      BinStream := TMemoryStream.Create;
      try
        StrStream := TStringStream.Create(s);
        try
          BinStream.WriteComponent(Component);
          BinStream.Seek(0, soFromBeginning);
          ObjectBinaryToText(BinStream, StrStream);
          StrStream.Seek(0, soFromBeginning);
          Result:= StrStream.DataString;
        finally
          StrStream.Free;  
        end;
      finally
        BinStream.Free
      end;
    end;function TForm1.StringToComponent(Value: string): TComponent;
    var
      StrStream:TStringStream;
      BinStream: TMemoryStream;
    begin
      StrStream := TStringStream.Create(Value);
      try
        BinStream := TMemoryStream.Create;
        try
          ObjectTextToBinary(StrStream, BinStream);
          BinStream.Seek(0, soFromBeginning);
          Result := BinStream.ReadComponent(nil);    finally
          BinStream.Free;
        end;
      finally
        StrStream.Free;
      end;
    end;我测试了一下:每隔2秒装载一张图,共循环调20次,速度没有多大影响,只是内存占用量比较大,不知各位有没有其它办法降一降。
      

  8.   

    我用loadchartFromFile一直报莫名其妙的错,"class TLineSeries Not Found"??
    是否可以用TChart.Assign方法,在程序另外定义一个不可视的chart(设为chart2),每次loadchartFromFile之前,使用chart1.Assign(chart2),把chart2的属性(即初始的属性)赋给chart1。这样的内存占用就只是一个Tchart类的大小吧