Don't you get an error message when you close your program??
In the FormClose you don't open the file. So the writing to the highscorefile should fail with an exception.
But you don't need to check if the file exists in the FormClose. You can just issue an rewrite(highscorefile); because you always want the file to be created on close.
Then in FormClose you have this:
for i:=1 to 10 do
rank[i] := info;
write(highscorefile, info);
Again... please look at what that does.
You want the rank[1], rank[2] etc saved to the file.
But you just assign info (which had no valid value at this point) to the current rank position on 1 to 10.
And then you write ONE record info (still invalid info) to the file.
Try to fix it that you write rank[1], rank[2] etc to the file.