Такой выпадающий список знаком пользователям со времен Windows 95 (например, список всех элементов оболочкиShell: папки My Computer, My Documents и т. п.) Соответствующий элемент управления появился в библиотеке ComCtl32 несколько позже, а в компонент он превратился только в Delphi 7.

Что отличает этот "продвинутый" выпадающий список от обычногоTCоmbоВох? С функциональной точки зрения основных отличий два: возможность добавлять картинки к элементам и выравнивать последние с разным отступом, имитируя иерархию.

Реализовано это следующим образом.

У компонента TComboBoxEx, помимо свойстваitems, есть свойство

property ItemsEx: TComboExItems;

которое представляет собой коллекцию элементов типаTComboExitem. Щелкнув на этом свойстве в Инспекторе объектов, увидим типичный редактор коллекций, где каждый элемент обладает такими опубликованными свойствами:

  •  свойство Caption отвечает за заголовок элемента, каким он буден виден в списке;
  •  свойство Data — это нетипизированный указатель на прикрепляемые к элементу данные;
  •  отступ от левого края списка задается свойством indent. В документации написано, что оно задается в пикселах. Это почти так: на самом деле одна единица значения свойства соответствует десятку пикселов;
  •  три номера картинок: обычный imageindex, номер для выбранного элемента Selected Imageindex И Overlaylmagelndex. Последнее свойство задает номер картинки, используемой как накладываемая маска для первых двух. Она должна быть черно-белой: белые области прозрачны для исходной картинки, черные — нет. Все три индекса указывают на один и тот же список картинок, задаваемый свойством images родительского компонента.

Дополнительные опции в расширенном выпадающем списке задаются свойствомstyleEx. Это — множество из четырех флагов, установка которых сводится к разрешению или запрету перечисленных выше новых свойств.