Delphi - база знаний

       

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


Как вставить растровое изображение в компонент 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.Top + 2,
            (Rect.Bottom - Rect.Top - 2) * 2, Rect.Bottom - Rect.Top - 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.Top + 1) * 2;
        end;
      TextOut(Rect.Left + Offset, Rect.Top, ListBox1.Items[Index]);
      Bitmap.Free;
    end;
end;

Данный пример работает медленно, но оптимизация, для ускорения, вызвала бы трудность в понимании общего принципа его работы.

Взято с Исходников.ru






Содержание раздела