繁体   English   中英

将XValues从一个TChartSeries复制到另一个

[英]Copy XValues from one TChartSeries to another

有谁知道如何在Delphi7(和TeeChart 4.04)中将XValues从一个TChartSeries复制到另一个? TChartSeries.ReplaceList(CopySeries.XValues, OriginalSeries.XValues)不起作用,因为它似乎替换了引用,所以当更改OriginalSeries时,CopySeries也是如此。 CopySeries的长度等于或大于OriginalSeries。 我想保留CopySeries.YValues。

我的解决方法是创建一个临时列表

Dummy := TChartSeries.Create(nil);
Dummy.AssignValues(OriginalSeries);
CopySeries.ReplaceList(CopySeries.XValues, Dummy.XValues);
Dummy.YValues.Destroy;

但是由于无法销毁Dummy而导致内存泄漏,因为这也会删除CopySeries.XValues引用的Dummy.XValues。

任何帮助是极大的赞赏。

我可以想到两种选择:

  1. 如《 实时图表 》一书中所述,将ValueList数组直接分配给该系列,例如:

     uses Series; procedure TForm1.FormCreate(Sender: TObject); begin Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues; Chart1.AddSeries(TLineSeries.Create(Self)); { set our X array } Chart1[1].XValues.Value:=Chart1[0].XValues.Value; { <-- the array } Chart1[1].XValues.Count:=Chart1[0].Count; { <-- number of points } Chart1[1].XValues.Modified:=True; { <-- recalculate min and max } { set our Y array } Chart1[1].YValues.Value:=Chart1[0].YValues.Value; Chart1[1].YValues.Count:=Chart1[0].Count; Chart1[1].YValues.Modified:=True; { Show data } Chart1.Series[1].Repaint; end; 
  2. 克隆系列:

     uses Series; procedure TForm1.FormCreate(Sender: TObject); begin Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues; Chart1.AddSeries(CloneChartSeries(Chart1[0])); end; 
  3. 如果使用的是TeeChart 4.04,则可能必须像Chart1.Series [0]这样处理系列,而不是像第一个示例中的Repaint调用那样处理Chart1 [0] 另外,您可以尝试如下操作:

     uses Series, Math; procedure TForm1.FormCreate(Sender: TObject); var i, MinNumValues, MaxNumValues: Integer; begin Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues(15); Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues(25); MinNumValues:=Min(Chart1.Series[0].Count, Chart1.Series[1].Count); MaxNumValues:=Max(Chart1.Series[0].Count, Chart1.Series[1].Count); for i:=0 to MinNumValues -1 do Chart1.Series[1].XValue[i]:=Chart1.Series[0].XValue[i]; for i:=MinNumValues to MaxNumValues-1 do Chart1.Series[1].ValueColor[i] := clNone; end; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM