Суббота, 18.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нужен форум на сайте?
Всего ответов: 90
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Система » Компоненты

Как поместить картинки в Combo Box

Делается это при помощи стиля ownerdraw, который присутствует в TComboBox. Нас интересуют два свойства этого стиля:

  • csOwnerDrawFixed - используется, если все битмапы имеют одинаковую высоту
  • csOwnerDrawVariable - используется для битмапов с разной высотой

После того как стиль будет установлен на один из вышеперечисленных, то можно воспользоваться событием onDrawItem. Это событие возникает каждый раз, когда приложению необходимо нарисовать пункт в выпадающем списке (combo box). Событие определяется следующим образом:

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState)

Control Элемент управления, содержащий пункт списка
Index Номер элемента списка
Rect прямоугольник, в котором будет отображён элемент списка
State Состояние элемента: выбран, заблокирован или имеет фокус (odSelected, OdDisabled или OdFocused)

Если выпадающему списку был присвоен стиль csOwnerDrawFixed, то всё, что надо сделать, это написать процедуру, которая будет рисовать битмап и текст в событии onDrawItem.

Для выпадающего списка со стилем csOwnerDrawVariable необходимо пройти ещё одну дополнительную стадию. Заключается эта стадия в создании обработчика для события onMeasureItem. Это событие вызывается перед DrawItem, для того, чтобы Вы могли установить фактическую высоту для каждого элемента списка. Вот его определение:

procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);

Control Элемент управления, содержащий пункт списка
Index Номер элемента списка
Height Собственно высота элемента списка с номером Index

От теории к практике

  • Создайте новое приложение
  • Разместите на форме combobox и imagelist (если Вы используете delphi 1, то Вам прийдётся хранить битмапы каким-то другим способом)
  • В Object Inspector установите следующие свойства:
Компонент Свойство Установите в Описние
ComboBox1 Style csOwnerDrawFixed Чтобы мы могли контролировать рисованием элементов.
ComboBox1 Items Здесь можно добавить любые строки, которые будут отображаться рядом с битмапами. Чтобы каждый элемент имел описание к картинке.
ImageList1 Используйте редактор списка картинок (ImageList Editor) Добавьте битмапы в том порядке, в котором они будут отображаться в combobox, а так же проверьте, чтобы они были одного размера. Прозрачный цвет можно установить здесь же. Это картинки, которые появятся в выпадающем списке
  • В заключение необходимо добавить следующий код для события onDrawItem:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index:Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 (* Заполняем прямоугольник *)
 combobox1.canvas.fillrect(rect); 

 (* Рисуем сам битмап *)
 imagelist1.Draw(comboBox1.Canvas,rect.left,rect.top,Index);

 (* Пишем текст после картинки *)
 combobox1.canvas.textout(rect.left+imagelist1.width+2,rect.top,
 combobox1.items[index]);
end;

Автор: Allan Carlton

Получить ссылку на материал

Категория: Компоненты | Добавил: Барон (20.12.2011)
Просмотров: 1079 | Теги: картинка, Combo Box | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
ActiveX [10]
CORBA и COM [16]
Kol и MCK [23]
WinAPI [28]
Компоненты [27]
Работа с Bluetooth [4]
Железо [8]
Текст [18]
Разное [98]
Королевство Delphi © 2010-2024
Яндекс цитирования