[TChart] Scrolling horizontal des séries
j'ai un ( ou plusieurs ) composant(s) TChart avec un nombre relativement importants de series ( typiquement 20 )
chaque serie contient le même nombre de points qui est compris entre 1000 et 10'000.
en x : le temps, en Y les valeurs d'aquisitions, etat de relais, ...
à une fréquence f comprise entre 20 et 100 Hz, on aquière un nouveau point pour chaque canal et on 'laisse tomber' le point le plus ancien : scrolling horizontal.
Toutefois cela implique des ressources matérielle tres importantes. ( je ne sais pas comment une series S d'un Tchart T demande un repaint si on la change mais si elle le fait dans la boucle qui fait de scrolling cela devient épouventable!)
Quelqu'un aurait-il un code optimisé pour réaliser un code équivalent à mais
moins gourment en ressources!
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
procedure TForm1.Timer1Timer(Sender: TObject); // 1kHz
begin
inc(n);
if n mod X =0 then // disiseur pour 20 a 100 Hz
begin
m:=0;
for serie:=Serie_first to serie_last // ( # 20 series )
begin
for i:=0 to serie.count-2 do
begin
serie.xvalue[i]:=serie.xvalue[i+1];
serie.yvalue[i]:=serie.yvalue[i+1];
end;
serie.xvalue[serie.count-1].xvalue:=serie.xvalue[serie.count-2].xvalue + deltat;
serie.Yvalue[serie.count-1].yvalue:= read_port(m);
inc(m);
end;
end;
end; |
Note : Peut-être le composant TChart n'est pas adapté et qu'un autre moyen est mieux ciblé.