Um die Ausführung meines Vorredners zu ergänzen: anders ist es unter Windows auch nicht gedacht.
Windows ist ein ereignisgesteuertes System. Der Standardweg ist, nur dann in deinem Control herumzumalen, wenn du via WM_PAINT dazu aufgefordert wirst (bzw. unter der
VCL die entsprechende Routine
Paint aufgerufen wird).
Wenn der Inhalt deines Controls sich ändert, solltest du dies einfach zur Kenntnis nehmen und dem System per
Invalidate mitteilen, dass der Inhalt neu gezeichnet werden musst.
Genau so verfährt Windows wenn z.B. ein anderes Fenster über deinem liegt und dann weggezogen wird - es markiert den entsprechenden Bereich auf dem Bildschirm als ungültig (invalid) und sendet ein WM_PAINT an alle Fenster von unten nach oben, die in diesem Bereich liegen (vereinfacht ausgedrückt).