Pues la cosa está bien dificil.
El listbox tiene la propiedad ItemHeight y debe estar establecida al máximo alto posible.
Otra parte del fallo de repintado es mío

que según veo lo has corregido:
Código Delphi
[-]ListBox1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, ListBox1.Items[index]);
Pero claro, debes conocer de antemano cuan grande será los elementos y cual será el mayor
A ver si te sirve, si no, la cosa iría por dibujar tú encima siempre... y no sé que tal se verá

.