有没有人知道如何在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。
非常感谢任何帮助。
答案 0 :(得分:6)
我可以想到两个选择:
将ValueList数组直接分配给该系列,如Real-time Charting文章中所述,例如:
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;
克隆系列:
uses Series;
procedure TForm1.FormCreate(Sender: TObject);
begin
Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues;
Chart1.AddSeries(CloneChartSeries(Chart1[0]));
end;
如果您使用的是TeeChart 4.04,您可能需要处理 Chart1.Series [0] 等系列,而不是 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;