Як помістити картинки в 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: