Hallo..
Es liegt tatsächlich an der Console mit Pipes.
Wenn deine Konsolenanwendung ein WriteLN macht, dann wird dieses erstmal von StdOut gepuffert und dann komplett an die Pipe geFlusht..
Würde in deiner Konsolenanwendung nach jedem
WriteLN('.');
ein
Flush(Output);
gemacht werden, dann wird die Ausgabe direkt in die Pipe geschrieben und könnte einzeln mit ReadFile gelesen werden.
Habe hier mal dein Testprogramm nachgebaut, mal 0-20 ohne Flush, mal 0-20 mit Flush..
Und siehe da, die ersten 20 kamen erst zusammen, die weiteren 20 schön einzeln.
http://www.delphibasics.co.uk/RTL.asp?Name=Flush
Hier wirds (mit einem File) beschrieben, aber eine Pipe ist für MS ja auch nur ein File.