Deine 4 erklärt sich daraus, dass Delphi wenn möglich Schleifen umdreht, bei dir also zu einer
for i := 4 downto 0 ...
Schleife macht.
IMHO wird das gemacht, weil der Vergleich auf 0 als Abbruchbedingung schneller gemacht werden kann, als auf eine andere Zahl. Und sie werden auch ganz rausoptimiert, wenn der Compiler keine Änderungen für den noch folgenden Code oder Objekte ausserhalb der Methode feststellt. (Deswegen war weiter vorne auch die Rede davon die Optimierung auszuschalten. Dann wird nix gedreht, und
imho auch nichts rausgeschnitten.)
Ich habe mir angewöhnt eigentlich nie meine Breakpoints auf den Anfang (oder Ende) einer Schleife zu setzen (auch nicht auf das "begin"). Ich meine, das war ursprünglich auch, weil es mal ging, und mal wieder nicht. Statt dessen schnappe ich mir einfach eine Zeile aus dem Rumpf, oder eine davor bzw. dahinter. Kein Gehampel und Gesuche, und führt auch zum Ziel. (Wenn ich mal eine Zeile brauche, z.B. mit der Schleife endet auch die Methode, werf ich eben ein ShowMessage('bla'); da hin.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)