Sorry, die Antwort hat ein wenig auf sich warten lassen.
Falls du einzelne Einträge mit einem Bild hinterlegen möchtest (oder lustige Einträge mit Farben hinterlegen), kannst du mal veruschen den Style auf eines der lbOwnerDrawXX (fixe oder variable Eintragsgröße) zu setzen und OnDrawItem (und ggf. OnMeasureItem) zuzuweißen. In den Ereignissen zeichnest du entsprechend (auch den jeweiligen String).
Falls es um ein Bild für den kompletten Hintergrund geht, auf dem dann normal die Einträge angezeigt werden, müsste es dann möglich sein, das Bild einmal zu zeichen und den Style auf lbOwnerDrawFixed zu setzen und den entsprechenden Teil des Bildes (oder das ganze Bild, wenns auf Rechenzeit nicht so ankommt) neu zu zeichnen.
Besser wäre hier aber die Komponente abzuleiten und auf WM_Paint zu reagieren, aber das scheint nicht auszureichen, da die Einträge wohl immer nochmal einzeln überzeichnet werden, also müsste man das auch hier überschreiben, außer du willst in deinem Bild Balken mit der eingestellten Hintergrundfarbe.
[Edit] Das mit dem WM_Paint überschreiben sollte doch gehen, einen kleinen Überblick dazu, wie die PaintBox sich zeichnet geben TCustomListBox.WMPaint, TCustomListBox.CNDrawItem und TCustomListBox.DrawItem. In WM_Paint wird eine Message erzeugt die CNDrawItem ausliest und darauf DrawItem aufruft. DrawItem ist als virtual deklariert und es zu überschreiben müsste dann eigentlich für den Hintergrund der Einträge ausreichen. Den Code hierfür müsste man eigentlich einfach ohne das FCanvas.FillRect übernehmen können.
[Edit2]Und das mit dem true bei InvalidateRect ist klar, denn das gibt ja gerade an, dass du den Hintergrund auch erneuert haben willst.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?