Hola:
¿Has probado con los componentes TeeChart? Creo que se podría usar una gráfica 2D, tipo lineas que unen puntos cartesianos. A medida que van entrando los datos, aparte de almacenarlos, vas sustituyendo el valor Y de la última coordenada X, y eliminando la primera. En teoría (no lo he probado) debería mostrarse lo que quieres.
Sé, no obstante, que existen componentes específicos para mostrarlo como tu quieres, la mayoría de pago.
Y si quieres hacerlo a mano, se me ocurre que almacenes en un array [N] de integer, donde N es el número de puntos en el eje X. Sobre un Canvas (¿TPaintBox?) dibujas cada vez todos los puntos recorriendo el array, acordándote de poner el Pen.Mode = pmNOTXOR. De esta forma, cuando recibes un nuevo punto, redibujas el array anterior (para que se borre la imagen que ya había), eliminas el primer elemento del array, corres la lista a la izquierda y añades el nuevo punto, volviendo a dibujar. Esto debe ser bastante rápido. Mira esto a ver si te sirve de idea:
Código:
var
Lista : array [200] de integer;
procedure DibujaLista;
var
i : Integer;
PAnterior : TPoint;
begin
with PaintBox1.Canvas do
begin
Pen.Mode := pmNOTXOR;
PAnterior := Point (0, Lista[0]);
for i:=0 to High(Lista) do
begin
MoveTo (PAnterior.x, PAnterior.y);
LineTo (i, Lista[i]);
PAnterior := Point (i, Lista[i]);
end;
end;
end;
procedure AnadePunto (y: Integer);
var
i : Integer;
begin
DibujaLista;
for i:=0 to High(Lista) - 1 do
Lista[i] := Lista[i + 1];
Lista[High(Lista)] := y;
DibujaLista;
end;