那位高手帮忙,实时测量中关于teechart显示。(帮忙提供些资料也行啊) ( 积分: 200 )

  • 主题发起人 主题发起人 tianlove
  • 开始时间 开始时间
T

tianlove

Unregistered / Unconfirmed
GUEST, unregistred user!
我看帖子有高手说,不用再数据库中读取数据,反复读数据很耗费内存资源。效率也不高。
要把数据保存到数据库的同时在保存到stringlist,teechart中直接读stringlist,这样效率高些。具体怎么做?那位高手给点代码?
还有就是teechart刷屏的问题,我用dbchart1.Series[0].Clear;
横轴固定显示100个点 后面加一个点,前面就消失一个点,我是用查询实现的,那位高手指点 一下有没有效率更高点办法?
 
1、我觉得你的数据应该直接放入数组。teechart可以直接读入数组的。
2、你固定显示100个点是可以的,你设置x轴的最小值和最大值就可以实现。
 
有add和delete方法的嘛,就是seires的哦。
 
另外 ,建议你别使用dbchart1
 
帮你顶 !!!!!
 
谢谢各位的回答,不用dbchart是可以的。用chart怎么读取数组的数据阿?望壁画老兄指点一下。
 
用TStringList保存一张表恐怕不好实现吧,用ListView或StringGrid吧
要实时显示数据可以直接把最后面的那点删除,添加一点,改变横轴
 
series1.AddArray()
 
to tianlove:
你即然是实时显示图形,那么你当然得反复读取数据库。
你说耗费内存资源,那只是因为你写的SQL语句效率低而已,提高效率莫非是写好你的SQL和设定一个不是很短的间隔而已。
TChart画那么百来个点只是小数据,不会消费什么效率的。
 
procedure TForm1.btnOKClick(Sender: TObject);
begin
crart1.Series[0].Clear;
Series1.AddXY(1, 10, 'a');
Series1.AddXY(2, 20, 'b');
Series1.AddXY(3, 30, 'c');
Series1.AddXY(4, 40, 'd');
end;

procedure TForm1.crGetAxisLabel(Sender: TChartAxis; Series: TChartSeries;
ValueIndex: Integer; var LabelText: String);
begin
if ValueIndex = -1 then
try
case Trunc(StrToFloat(LabelText)) of
0: LabelText := '-';
1: LabelText := 'a';
2: LabelText := 'b';
3: LabelText := 'c';
4: LabelText := 'd';
end;
except
end;
end;
=======================
参考一下,这是画的条形图;画点改成TPointSeriea;
 
to danng
谢谢你的指导,我说的是可以看到的是最新的100个点,其实数据量也不会超过4000个。每次实时监测一般不会超过一个小时。每秒钟取一个数。
谢谢楼上的给的例子,学到不少东西。
 
问题已经解决
Chart1.BottomAxis.Automatic := false;
if strtoint(Edit4.Text)>100 then
begin
chart1.BottomAxis.Maximum:=strtoint(edit4.Text);
chart1.BottomAxis.Minimum:=chart1.BottomAxis.Maximum-strtoint(edit3.Text);
end
else
Chart1.BottomAxis.SetMinMax(0, 100);
 
多人接受答案了。
 
后退
顶部