Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: октябрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Как вставить растровое изображение в компонент 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;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS