So wie ich das sehe ist das Problem der sleep Aufruf:
Dein Programm macht random(10) * 10 + 20)=
20..120 ms gar nichts!
Deswegen ruckelt das Programm ziemlich.
Besser wäre z.B. Der Aufruf in einem TTimer,
in Verbindung mit
GetTickCount (oder einem
High-Resolution-Timer).
Damit kannst du die Bewegung auch berechnen. (Der TTimer arbeitet im kleinen Bereich sehr ungenau,
deshalb Verlass dich nicht auf den Interval).
Außerdem solltest du dich um die EInvalidPointer beim Beenden kümmern.
Hast dui vielleicht das MainForm irgendwo freigegeben?
Der Fehler tritt normalerweise dann auf, wenn ein Objekt (oder Formular, ...)
Freigegeben wird, obwohl es nicht mehr existiert (schon freigegeben ist).
Exception EInvalidPointer in Modul MouseTrail2.exe bei 00003BC9.
Ungültige Zeigeroperation.