如何动态创建teechart的searies(100分)

  • 主题发起人 主题发起人 gutian
  • 开始时间 开始时间
G

gutian

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用如下语句:
SeriesCls:=TPieSeries;
with SeriesCls.Create(chart) do
执行之后,每做一次,legend就增加一次,其实就是,原来的searies没有清除。
但是我已经使用
for i:=0 to chart.SeriesCount-1 do
begin
chart.Series.Clear;
end;

 
series.clear 仅仅是释放了series中的数据.并没有释放series 本身
用free试试
 
谢谢王老师的解惑,但有个问题:
SeriesCls:=TLineSeries;
while not eof do
begin
if CheckBox1.State=cbChecked then
begin
if TmpStr<>FieldByname(CmbZ.Text).AsString then
begin
with SeriesCls.Create(chart) do
begin
ParentChart:=Chart;
Title:=FieldByname(CmbZ.Text).AsString;
TmpStr:=FieldByname(CmbZ.Text).AsString;
end;
inc(i);//用来在后面使用chart.searies.add()
end;
end
然后,再用
for i:=0 to chart.SeriesCount-1 do
begin
chart.Series.Free;
end;
就会出错,根据我的判断,好像在chart中的实际存储的seriescount与它的线是不符的。

 
为什么每次只能free少于等于3个的series,所以如果在series多于3个时,free总是出错
这是为什么
 
你这样写吧,
for i:=chart.SeriesCount-1 downto 0 do
begin
chart.Series.Free;
end;
一定不会有错
哈哈哈:》
 
谢谢,成功。请问yinxianglong兄:这是为何?难道一定要顺序、逆序处理么
 
to gutian and yinxianglong 兄:
拜读您二位的精彩问答,我又一个问题想请教一下:代码中
with SeriesCls.Create(chart) do
begin
ParentChart:=Chart;
Title:=FieldByname(CmbZ.Text).AsString;
TmpStr:=FieldByname(CmbZ.Text).AsString;
end;
inc(i);//用来在后面使用chart.searies.add()
end;
end
然后,再用
for i:=0 to chart.SeriesCount-1 do
begin
chart.Series.Free;
end;
创建一个series画图,然后用series.free 后,在窗口中chart表不就看不到要画的series了吗?我要用timer控件触发,在chart中创建一些series,但发现随时间的运行,如果不将series free掉的话,内存占用就越来越大。但是用free以后,就没有图像了?您是如何解决的?
 
后退
顶部