Использование графики в ListBox
Разбираться лучше всего на конкретном примере, так что попробуем создать ListBox, который отображал имена графических файлов какой-нибудь директории вместе с картинками.
Чтобы заполнить 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 можно увеличить.
Комментарии