In Delphi2009 and newer (so yours too), string is no longer 1 byte per char, but multiple bytes.
So, while
var
ID: String[10];
Looks like an array of 10 bytes, it's not.
So if you do
aStream.Read(ID[1], 10);
You read 10 bytes into an array which is longer then 10 bytes. Result is that you don't know what is in the rest of the array. There is probably some crap in there which is interpreted as a string when you try to put it in the edit.