Содержание материала

Для этого необходимо установить в инспекторе объектов поле Style в lbOwnerDrawFixed, при фиксированной высоте строки, или в lbOwnerDrawVariable, при переменной, и установить собственный обработчик события для OnDrawItem. В этом обработчике и надо рисовать растровое изображение.

Пример:

Рисуются изображения размером 32*16 (размер стандартного глифа для Delphi). Очень полезно при поиске нужного изображения для кнопок!

Установить в инспекторе объектов для ListBox поле ItemHeight = 19, а поле Color = clBtnFace.

 

Code:

{ Загрузить список файлов в 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;

  

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

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить