Использование графики в Listbox
Использование графики в Listbox
Использование графики в Listbox У класса TLstbox (и TCombobox тоже) есть свойство Style, определяющее порядок рисования объекта. По-умолчанию оно установлено в lbstandard и за внешний вид объекта отвечает windows. Если установить это значение в lbownerdrawfixed или lbownerdrawvariable, то можно несколько разнообразить внешний вид объекта. Разбираться лучше всего на конкретном примере, так что попробуем создать Lstbox, который отображал имена графических файлов какой-нибудь директории вместе с картинками. Чтобы заполнить Listbox надо написать следующее (чтобы каждый файл не прописывать можно просто послать сообщение): procedure tform1.button1click(sender: tobject); var s : string; begin s:='c:\windows\*.bmp'#0; listbox1.perform(lb_dir, ddl_readwrite, longint(@s[1])); end; Здесь мы указали listbox'у, какие файлы требуется отображать. Устанавливаем свойство style нужно установить в lbownerdrawfixed и создать обработчик события ondrawitem: procedure tform1.listbox1drawitem(control: twincontrol; index: integer; rect: trect; state: townerdrawstate); var bitmap: tbitmap; offset: integer; bmprect : trect; begin with (control as tlistbox).canvas do begin {очищаем прямоугольник} fillrect(rect); {считываем картинку} bitmap:=tbitmap.create; bitmap.loadfromfile('c:\windows\'+listbox1.items[index]); if bitmap <> nil then begin {вычисляем квадрат для показа картинки} bmprect:=bounds(rect.left + 2, rect.top + 2, rect.bottom-rect.top-2, rect.bottom-rect.top-2); {рисуем картинку} stretchdraw(bmprect, bitmap); offset := rect.bottom-rect.top + 6; end; {выводим текст} textout(rect.left+offset,rect.top,listbox1.items[index]); {не забыть освободить!} bitmap.free; end; end; Чтобы картинки получились побольше, значение свойства itemheight можно увеличить.