Шаг 20.
Вкладка Win32. Компонент TComboBoxEx

    На этом шаге мы рассмотрим компонент TComboBoxEx.

    Компонент TComboBoxEx (Расширенный список) впервые введен в версии 6. По сравнению с рассмотренным компонентом TComboBox, он позволяет снабжать пункты (элементы) списка небольшими изображениями, а также регулирует отступ каждого элемента от левого края списка.

    Большая часть свойств, методов и событий компонентов TComboBoxEx и TComboBox совпадают. Специфические свойства описаны в таблице.

Таблица 1. Свойства компонента TComboBoxEx
Свойство Описание
property Images: TCustomImageList; Содержит ссылку на объект-хранилище изображений
property ItemsEx: TComboExItems; Содержит ссылку на объект класса TComboExItems

    Объект класса TComboExItems содержит всю необходимую информацию о списке в целом. Свойства этого класса представлены в таблице.

   
Таблица 2. Свойства класса TComboExItems
Свойство Описание
property CaseSensitive: Boolean; Определяет, будут ли учитываться регистр букв при сортировке строк
property Count: Integer; Содержит количество строк в списке
property ComboItems[const Index: Integer]: TComboExItem; Открывает индексированный доступ к объектам класса TComboExItem, в которых хранится информация о каждом элементе списка
property SortType: TSortType; Определяет способ сортировки элементов:
  • stNone - нет сортировки;
  • stData - по значениям свойства Data;
  • stText - по значениям свойства Caption;
  • stBoth - объединенная сортировка (по значениям обоих свойств).
Свойства Data и Caption представлены ниже в описании класса TComboExItem

    Если для списка указан тип сортировки stText, строки списка сортируются немедленно. Если указан тип stData или stBoth, сортировка осуществляется в обработчике события TComboExItems.OnCompare.

    В объектах класса TComboExItem хранится вся информация о каждом элементе списка. Этот класс имеет собственные свойства.

   
Таблица 3. Свойства класса TComboExItem
Свойство Описание
property Caption: String; Текст элемента списка
property Data: Pointer; Указатель на связанный с элементом произвольный обект
property ImageIndex: TImageIndex; Индекс связанного с элементом изображения в раскрытом списке
property Indent: Integer; Смещение элемента от правого края листа
property OverlayImageIndex: TImageIndex; Определяет индекс маски, накладываемой на изображения ImageIndex и SelectedImageIndex
property SelectedImageIndex: TImageIndex; Индекс изображения для выбранного элемента списка

    У класса TComboExItems есть собственные методы и события, управляющие списком в целом.

   
Таблица 4. Методы класса TComboExItems
Метод Описание
function Add: TComboExItem; Добавляет к списку новый элемент
function AddItem(const Caption: String; const ImageIndex, SelectedImageIndex, OverlayImageIndex, Indent: Integer; Data: Pointer): TComboExItem; Добавляет к списку новый элемент и инициализирует его свойства
function Insert(Index: Integer): TComboExItem; Вставляет в указанную позицию списка новый элемент
procedure CustomSort(Compare: TListItemsCompare); Сортирует элементы с помощью функции Compare
procedure Sort; Сортирует элементы с помощью обработчика события OnCompare

    Помимо перечисленных в таблице, в классе определены также типичные для любой коллекции методы: Assign, Clear, Delete и т. д. Для класса определено единственное событие:

type TListCompareEvent = function (List: 
 TListControlItems; Item1, Item2: TListControlItem) : Integer of object;
property OnCompare: TListCompareEvent;

    Это событие возникает, если в качестве типа сортировки выбрано значение stData или stBoth. Обработчик должен проанализировать два элемента и вернуть -1,0 или +1, если соответственно первый элемент меньше, равен или больше второго.

    Методы компонента TComboBoxEx.

   
Таблица 5. Методы компонента TComboBoxEx
Метод Описание
procedure AddItem (Item: String; AObject: TObject); Добавляет новый элемент и связанные с ним данные
procedure Clear; override; Очищает список
procedure ClearSelection; override; Проверяет, выделен ли какой-то элемент списка и, если так, снимает выделение (помещает -1 в свойство ItemIndex и очищает свойство Text)
procedure CopySelection (Destination: TCustomListControl); override; Проверяет, выделен ли какой-то элемент списка и, если так, копирует его в список Destination
procedure DeleteSelected; override; Проверяет, выделен ли какой-то элемент списка и, если так, удаляет его из списка
function Focused: Boolean; override; Возвращает значение True, если компонент имеет фокус ввода
procedure MoveSelection(Destination: TCustomListControl); virtual; Проверяет, выделен ли какой-то элемент списка и, если так, копирует его в список Destination и затем удаляет
procedure SelectAll; override; Выделяет весь текст выбранного элемента. Чтобы выделить часть текста, используйте свойства SelStart и SelLength

    События компонента TComboBoxEx.

Таблица 6. События компонента TComboBoxEx
Событие Описание
property OnBeginEdit: TNotifyEvent; Возникает, когда пользователь начинает изменять текст в поле списка
property OnChange: TNotifyEvent; Возникает при каждом изменении пользователем (но не программой!) свойства Text
property OnDropDown: TNotifyEvent; Возникает в момент раскрытия списка
property OnEndEdit: TNotifyEvent; Возникает, когда пользователь заканчивает изменять текст в поле списка
property OnSelect: TNotifyEvent; Возникает, когда пользователь выделяет элемент списка




Предыдущий шаг Содержание