Delphi World - Як помістити картинки в ComboBox

картинки

Робиться це за допомогою стилю ownerdraw, який є у TComboBox. Нас цікавлять дві властивості цього стилю:

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

Після того як стиль буде встановлений на один із вищеперелічених, то можна скористатися подією на DrawItem. Ця подія виникає щоразу, коли додатку необхідно намалювати пункт у списку (combo box). Подія визначається так:

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

Якщо списку, що випадає, був присвоєний стиль csOwnerDrawFixed, то все, що треба зробити, це написати процедуру, яка буде малювати бітмап і текст у події наDrawItem.

Для списку зі стилем csOwnerDrawVariable необхідно пройти ще одну додаткову стадію. Укладається ця стадія у створенні оброблювача для події наMeasureItem. Ця подія викликається перед DrawItem для того, щоб Ви могли встановити фактичну висоту для кожного елемента списку. Ось його визначення:

Control Елемент керування, що містить пункт списку Index Номер елемента списку Height Власне висота елемента списку з номером Index

Від теорії до практики

Створіть нову програму. Розмістіть на формі combobox та imagelist (якщо Ви використовуєте delphi 1, то Вам доведеться зберігати бітмапи якимось іншим способом). У Object Inspector встановіть таківластивості:

ComboBox1 -> Style -> csOwnerDrawFixed -> Щоб ми могли контролювати малювання елементів.

ComboBox1 -> Items -> Тут можна додати будь-які рядки, які відображатимуться поруч із бітмапами. Щоб кожен елемент мав опис картинки.

На закінчення необхідно додати наступний код для події onDrawItem: