Title: Set background image in ListBox
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]));