Что-то подобное я когда-то очень давно

делал. ЕМНИП, надо переписать onPaint() или как там в Delphie. Кроме того, запретить компоненту очищать бэкграунд (тоже плохо помню, при поимке WM_ERASEBKGND надо сразу возвращать 0 (или 1?)).
Короче

. Задача была решена много лет назад и сеть
полным-полна готовых решений.