El método SaveToStream realiza una escritura a partir de la posición actual en el stream (de memoria, archivo o lo que fuera), y mueve la posición al final de lo que escribió (la posición está en la propiedad Position). Si realizas varios SaveToStream sin hacer otras operaciones sobre el stream, esto significará que efectivamente no se "machaca" lo anterior. Si en cambio quieres que lo anterior se borre, hazle un Clear al stream. Si tu pregunta viene porque te encuentras que el stream está vacío después cuando llega el momento de leerlo, es porque tienes que volver la posición al principio (Position := 0) y entonces leer (después de eso Position quedará al final de lo leído).
Espero haber sido claro, y si no, tal vez este ejemplo te ayude:
procedure TForm1.Button1Click(Sender: TObject);
var
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
Memo1.Lines.SaveToStream(MemoryStream);
MemoryStream.Clear; // empezará de cero otra vez
Memo1.Lines.SaveToStream(MemoryStream);
Memo1.Lines.SaveToStream(MemoryStream);
MemoryStream.Position := 0;
Memo1.Lines.LoadFromStream(MemoryStream);
// El memo duplicará sus líneas
finally
MemoryStream.Free;
end;
end;
Saludos,
Ernesto D'Spirito
http://www.latiumsoftware.com/es