简体   繁体   English

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

[英]Copy XValues from one TChartSeries to another

Does anyone know how to copy the XValues from one TChartSeries to another in Delphi7 (and TeeChart 4.04)? 有谁知道如何在Delphi7(和TeeChart 4.04)中将XValues从一个TChartSeries复制到另一个? TChartSeries.ReplaceList(CopySeries.XValues, OriginalSeries.XValues) does not work, since it seem to replace the reference, so when OriginalSeries is changed, so is CopySeries. TChartSeries.ReplaceList(CopySeries.XValues, OriginalSeries.XValues)不起作用,因为它似乎替换了引用,所以当更改OriginalSeries时,CopySeries也是如此。 The length of CopySeries is equal or greater than OriginalSeries. CopySeries的长度等于或大于OriginalSeries。 I want to preserve the CopySeries.YValues. 我想保留CopySeries.YValues。

My workaround has been to create a temporary list 我的解决方法是创建一个临时列表

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

but I get a memory leakage since I cannot Destroy the Dummy since that also removes the Dummy.XValues referenced by CopySeries.XValues. 但是由于无法销毁Dummy而导致内存泄漏,因为这也会删除CopySeries.XValues引用的Dummy.XValues。

Any help is greatly appreciated. 任何帮助是极大的赞赏。

I can think of two options: 我可以想到两种选择:

  1. Assigning ValueList arrays directly to the series as in the Real-time Charting article, for example: 如《 实时图表 》一书中所述,将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. Clone series: 克隆系列:

     uses Series; procedure TForm1.FormCreate(Sender: TObject); begin Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues; Chart1.AddSeries(CloneChartSeries(Chart1[0])); end; 
  3. If you are using TeeChart 4.04 you'll probably have to address series like Chart1.Series[0] instead of Chart1[0] as in the Repaint call in the first example. 如果使用的是TeeChart 4.04,则可能必须像Chart1.Series [0]这样处理系列,而不是像第一个示例中的Repaint调用那样处理Chart1 [0] Alternatively you could try something like this: 另外,您可以尝试如下操作:

     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