Maybe i'm wrong at something or i should change unit?
After studying your code I found 2 things that cause the problem:
- Clearing and repainting the whole screen should avoided.
- Drawing text should be performed once only
Clearing and drawing whole screen is painfully slow, except it is performed by graphics dedicated processors (via OpenGL or DirectX). Altenatively, you can overlay a bigger sprite to 'clean' the screen area and showing the new position in a single pass. This animation trick is often used on old games without the need of game graphics cards in DOS era.
For the second issue, it is much wiser to draw the text once, save it to memory buffer and use the buffer, no need to regenerate the text.