Вобщем-то идея и так вполне понятна!
Есть окно 5000*300 (от-150 до 150). По вертикали все точки укладываются по определению. По горизонтале, когда новая поступившая точка выходит за пределы окна, оно сдвигается на 100 точек.
Смущает мне тут только одно. Я сам точки не ресую. Когда с порта приходит отсчет, он просто дабавляется к серии ser.AddY(nn), а вся перересовка вывполняется самим компонентом TeeChart. На событии серии ser.onAfterAdd стоит проверка, выходит ли новая точка за экран, и если да, то окно сдвигается... Собственно сейчас код вылвожу!
Код:
procedure TfrmDFS.MSCommComm(Sender: TObject);
//Событие при получении чего-нибудь в буфер порта
var
v:array of Byte;
f,nn:Integer;
begin
If Self.MSComm.InBufferCount>0 then
begin
SetLength(v,Self.MSComm.InputLen);
v:=Self.MSComm.Input;
For F:=0 to length(v)-1 do
Begin
If v[F]>127 then nn:=v[F]-256
else nn:=v[F];
Self.serCurrentSeries.AddY(nn); // Вот тут добавляем точки
End;
end;
end;
Код:
procedure TDefSeriesMng.OnSerTestAfterAdd(Sender: TChartSeries;
ValueIndex: Integer);
//Смещение окна, если график выходит за правую границу
begin
If Sender.GetHorizAxis.Maximum<Sender.XValues.MaxValue then
With Sender.GetHorizAxis do
Begin
maximum:=maximum+100;
minimum:=minimum+100;
end;
end;
Вот собственно и весь код, который относится к добавлению и проресовке... Все остальное делается автоматически...