Як помістити картинки в Combobox
Робиться це за допомогою стилю ownerdraw, який є у TComboBox. Нас цікавлять дві властивості цього стилю:
- csOwnerDrawFixed - використовується, якщо всі бітмапи мають однакову висоту
- csOwnerDrawVariable - використовується для бітмапів з різною висотою
Після того як стиль буде встановлений на один із вищеперелічених, то можна скористатися подією на DrawItem. Ця подія виникає щоразу, коли додатку необхідно намалювати пункт у списку (combo box). Подія визначається так:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState)
| Control | Елемент керування, що містить пункт списку |
| Index | Номер списку |
| Rect | прямокутник, у якому буде відображено елемент списку |
| State | Стан елемента: вибраний, заблокований або має фокус (odSelected, OdDisabled або OdFocused) |
Якщо списку, що випадає, був присвоєний стиль csOwnerDrawFixed, то все, що треба зробити, це написати процедуру, яка буде малювати бітмап і текст у події наDrawItem.
Для списку зі стилем csOwnerDrawVariable необхідно пройти ще одну додаткову стадію. Укладається ця стадія у створенні оброблювача для події наMeasureItem. Ця подія викликається перед DrawItem для того, щоб Ви могли встановити фактичну висоту для кожного елемента списку. Ось його визначення:
procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
| Control | Елемент керування, що містить пункт списку |
| Index | Номер списку |
| Height | Власне висота елемента списку з номером Index |
Від теорії до практики
- На закінчення необхідно додати наступний код для події onDrawItem: