gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:19:33 25 4
gpt4 key购买 nike

有谁知道如何在 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 数组直接分配给 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;
  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] 这样的系列,而不是像 Chart1[0] Repaint 在第一个示例中调用。或者你可以尝试这样的事情:

    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;

关于delphi - 将 XValues 从一个 TChartSeries 复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7528132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com