Показать сообщение отдельно
Старый 13.01.2005, 17:22     # 5
Felan
Junior Member
 
Аватар для Felan
 
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52

Felan Путь к славе только начался
Вобщем-то идея и так вполне понятна!

Есть окно 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;
Вот собственно и весь код, который относится к добавлению и проресовке... Все остальное делается автоматически...
__________________
Когда у оппонента кончаются аргументы, он начинает уточнять национальность.
Felan вне форума