Tru*_*uls 2 delphi memory-leaks teechart
有没有人知道如何在Delphi7(和TeeChart 4.04)中将XValues从一个TChartSeries复制到另一个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;
Run Code Online (Sandbox Code Playgroud)
但是我得到了内存泄漏,因为我无法销毁Dummy,因为它也会删除CopySeries.XValues引用的Dummy.XValues.
任何帮助是极大的赞赏.
我可以想到两个选择:
像在Real-time Charting文章中一样将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;
Run Code Online (Sandbox Code Playgroud)克隆系列:
uses Series;
procedure TForm1.FormCreate(Sender: TObject);
begin
Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues;
Chart1.AddSeries(CloneChartSeries(Chart1[0]));
end;
Run Code Online (Sandbox Code Playgroud)如果您使用的是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;
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
3559 次 |
最近记录: |