|
|
|
|
Как
вставить растровое изображение в компонент 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;
Данный
пример работает медленно, но оптимизация, для ускорения, вызвала бы
трудность в понимании общего принципа его работы.
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|