You should use onDrawItem event of ListBox component, if you want to create ListBox with some background picture. Pay attention to the IntersectRect function.
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var ImageRect1, NewRect, ImageRect2, ResRect: TRect; begin ImageRect1 := Classes.Rect( 0, 0, Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Height); ImageRect2 := ImageRect1; IntersectRect(ResRect, ImageRect2, Rect); NewRect.Left:=ImageRect1.Left; NewRect.Top:=ImageRect1.Top+ResRect.Top-ImageRect2.Top; NewRect.Right:=ImageRect1.Right; NewRect.Bottom:=ImageRect1.Bottom+ ResRect.Bottom- ImageRect2.Bottom; ListBox1.Canvas.CopyRect( ResRect, Image1.Picture.Bitmap.Canvas, NewRect); ListBox1.Canvas.Brush.Style:=bsClear; ListBox1.Canvas.TextOut( Rect.Left+2, Rect.Top, ExtractFileName(ListBox1.Items[Index]));