Страница 20 из 59 Компонент TListBox TObject—>TPer si stent—”TComponent—>TControl—>TWinControl—> —>TCustomListBox—>TListBox Модуль STDCTRLS Страница Палитры компонентов Standard Этот компонент соответствует списку выбора — стандартному элементу управления Windows. С его помощью пользователь может выбрать одну из строк, которые хранятся в свойстве: (Pb) property Items: TStrings; В списке Items. Strings хранится текст строк, а список Items.Objects пользователь может использовать для хранения связанных с ними объектов, например, картинок для нестандартно изображаемого списка. Индекс текущего (сфокусированного) элемента списка содержится в свойстве: property Itemlndex: Integer; Не путайте сфокусированный элемент (стандартно он помещается в рамку из точек) и выделенный (цветным фоном), они могут не совпадать. Смысл этих понятий будет объяснен ниже. Значение индекса Itemlndex лежит в диапазоне от 0 до Items.Count-1. Он доступен для чтения и записи. Индекс первого видимого элемента в списке представлен свойством: property Toplndex: Integer; Он будет ненулевым в том случае, когда все элементы не помещаются в окне списка, и была сделана прокрутка. Список выбора имеет свою канву: (Ro) property Canvas: TCanvas; и на его поверхности можно рисовать. Когда в списке нужно предусмотреть выделение одновременно более одного элемента, оперируйте свойствами: (Pb) property MultiSelect: Boolean; (Pb) property ExtendedSelect: Boolean; Если MultiSelect установлено в False, то в списке одновременно не может быть выделено несколько элементов и значение ExtendedSelect не играет роли. В противном случае дело обстоит так. При ExtendedSelect = False каждый раз изменяется состояние только сфокусированного элемента. Каждый щелчок мышью или нажатие пробела меняет его состояние выделения на противоположное. Если ExtendedSelect = True, то выбор происходит при передвижении мыши с нажатой левой кнопкой, каждом щелчке мышью на новом элементе списка при нажатых <Ctri> или <Shift>, или при нажатии <Shift>+<t/4->. Количество выделенных элементов можно узнать из свойства: (Ro) property SelCount: Integer; Проверку и установку выделения для каждого элемента можно провести, используя свойство: property Selected[Index: Integer]: Boolean; При задании ошибочного индекса при доступе к списку возникает исключительная ситуация EList Error. Чтобы расположить строки в алфавитном порядке, нужно установить в True свойство: (Pb) property Sorted: Boolean; Элементы списка могут появляться как в одном столбце — Друг под другом, так и в нескольких соседних. В этом случае список может иметь горизонтальную полосу прокрутки. Число столбцов определяется свойством: (Pb) property Columns: Integer; Если столбец один, то значение этого свойства равно 0. Очистить список можно при помощи метода: procedure Clear; Стиль обрамления компонента определяется свойством: (Pb) property BorderStyle: TBorderStyle; Найти индекс элемента, которьш содержит точку Pos, можно при помощи метода: function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer; Параметр Existing определяет, что возвращается в случае неудачи (значение Items.Count либо -1). Прямоугольник, отведенньш элементу списка с индексом Index, определяется с помощью метода: function ItemRect(Index: Integer): TRect; При создании и визуализации списка система обычно подгоняет его высоту таким образом, чтобы в видимое поле помещалось целое число элементов. Это соответствует значению True свойства: (Pb) property IntegralHeight: Boolean; Если IntegralHeight равно False, то высота списка не изменяется. Это свойство не играет роли при стиле списка IbOwnerDrawVariable. Стиль списка может быть стандартным или определенным пользователем через свойство: (Pi-y property Style; TListBoxStyle = (IbStandard, IbOwnerDrawFixed, IbOwnerDrawVariable) ; Рассмотрим назначение этого свойства более подробно. В стандартном варианте (IbStandard) в списке отображаются только строки из свойства Items; в двух других случаях рисуемые пользователем списки могут иметь фиксированную (IbOwnerDrawFixed) или переменную (IbOwnerDrawVariable) высоту элемента. В первом случае нужно задать свойство: (Pb) property ItemHeight: Integer; Для стиля IbOwnerDrawVariable высота каждого элемента определяется программистом, которьш должен предусмотреть обработку события: (Pb) property OnMeasureItem: TMeasureItemEvent; TMeasureItemEvent = procedure(ListBox: TListBox; Index: Integer; var Height: Integer) of object; Имея указатель на список, индекс измеряемого элемента и начальную высоту, необходимо переустановить Height так, чтобы в элементе поместилось все, что нужно в нем нарисовать. Для рисования каждого элемента инициируется событие: (Pb) property OnDrawItem: TDrawItemEvent; TDrawItemEVent = procedure(ListBox: TListBox; Index: Integer; Rect: TRect; State: TOwnerDrawState) of object; Обработчик этого события получает указатель на список ListBox, индекс элемента Index, отведенньш для рисования прямоугольник Rect, и состояние элемента в параметре State: TOwnerDrawState = set of (odSelected, odGrayed, odDisabled, odChecked, odFocused) ; Для списка выбора из этого множества действительны только флаги odSelected, odDisabled, odFocused. |