Ich war mir sicher, dass die
VCL sowas wie ein OwnerDraw-Event anböte.
Jetzt habe ich in Lazarus nachgesehen (hab nunmal grad kein Delphi) und gesehen, dass zumindest die LCL keines hat.
D.h., dass du da mit Win32API-Subclassing-Konstrukten ran müsstest.
(dazu gibt's hier von Luckie auch ein gutes Tutorial

)
Demnach wäre himitsu's Lösung deutlich schneller und einfacher anzuwenden.