In the OnDrawItem event, first fill the entire rectangle given as parameter with the background color (your first two lines)
Define a temporary rectangle (R) equal to ARect. Set R.Right := ARect.Left + w, where w is the requested width of the color box. Maybe, to get a square, select w := ARect.Height. Shrink the size of R by a few pixels to avoid the color boxes of the lines touching themselves (InflateRect(R, -2, -2). Fill that smaller R with the requested color.
In order center the text vertically, calculated the text height: h := Listbox.Canvas.TextHeight('Tg'). Then calculate the vertical text position: y := (ARect.Top + ARect.Bottom - h) div 2. Finally draw the text: Listbox.Canvas.TextOut(R.Right + (some distance), y, Listbox.Items[Index])