Как вставить растровое изображение в компонент ListBox?

Для этого необходимо установить в инспекторе объектов поле Style в lbOwnerDrawFixed, при фиксированной высоте строки, или в lbOwnerDrawVariable, при переменной, и установить собственный обработчик события для OnDrawItem. В этом обработчике и надо рисовать растровое изображение.
Пример:
Рисуются изображения размером 32*16 (размер стандартного глифа для Delphi). Очень полезно при поиске нужного изображения для кнопок!
Установить в инспекторе объектов для ListBox поле ItemHeight = 19, а поле Color = clBtnFace.

{ Загрузить список файлов в ListBox1 при нажатии на кнопку Load (например)}
procedure TForm1.bLoadClick(Sender: TObject);
VAR S : String;
begin
 ListBox1.Clear; {чистим список}
 S := '*.bmp'#0; {задаем шаблон}
 ListBox1.Perform(LB_DIR, DDL_ReadWrite, Longint(@S[1])); {заполняем список}
end;
  ............
{Отобразить изображения и имена файлов в ListBox}
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: DrawState);
VAR
 Bitmap : TBitmap;
 Offset : Integer;
 BMPRect: TRect;
begin
 WITH (Control AS TListBox).Canvas DO BEGIN
  FillRect(Rect);
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile(ListBox1.Items[Index]);
  Offset := 0;
  IF Bitmap <> NIL THEN BEGIN
  BMPRect := Bounds(Rect.Left+2, Rect.+2,
  (Rect.Bottom-Rect.-2)*2, Rect.Bottom-Rect.-2);
  {StretchDraw(BMPRect, Bitmap); Можно просто нарисовать, но лучше сначала убрать фон}
  BrushCopy(BMPRect,Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height),
  Bitmap.Canvas.Pixels[0, Bitmap.Height-1]);
  Offset := (Rect.Bottom-Rect.+1)*2;
  END;
  TextOut(Rect.Left+Offset, Rect., ListBox1.Items[Index]);
  Bitmap.Free;
  END;
end;

Данный пример работает медленно, но оптимизация, для ускорения, вызвала бы трудность в понимании общего принципа его работы.
Зайцев О.В.
Владимиров А.М.
Взято из http://forum.sources.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...