Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

3.14. Общий список (list view)

Начиная с Windows 95 и NT 3.51, в операционных системах фирмы Microsoft к основному набору оконных классов добавились так называемые common controls ("общие" оконные управляющие элементы, или контролы). Среди них находится и окно для просмотра списков произвольных элементов, текстов и изображений - list view. В библиотеке KOL все "общие" контролы так же реализованы внутри объектного типа TControl. Более того, во многих случаях сохранен полиморфизм методов, свойств и событий, так что по внешнему интерфейсу для программиста "общие" контролы практически не отличаются от изначальных оконных объектов (так называемых GUI-окон, GUI - Graphic User Interface, или графический пользовательский интерфейс).

Конструктор общего списка:

NewListView( Parent, style, options, IL_normal, IL_small, IL_state );

В конструкторе сразу задается стиль (lvsIcon - пиктограммы, lvsSmallIcons - маленькие пиктограммы, lvsList - список, lvsDetail - детализированный, lvsDetailNoHeader - детализированный без заголовка), списки изображений (IL_normal - для стиля "пиктограммы", IL_small - для всех прочих стилей отображения, IL_state - для хранения пиктограмм "состояния", изображаемых в отдельной колонке в стилях lvsDetail и lvsDetailNoHeader; на месте любых списков может быть передан nil, если список не используется), а так же опции:

lvoIconLeft - в режимах lvsIcon, lvsSmallIcon размещать пиктограмму слева от текста (а не выше текста, как по умолчанию);

lvoAutoArrange - автоматическое упорядочивание элементов в режимах просмотра lvsIcon и lvsSmallIcon;

lvoButton - пиктограммы изображаются в виде кнопок (для режима просмотра lvsIcon);

lvoEditLabel - разрешается редактирование текста меток (первая колонка элемента);

lvoNoLabelWrap – текст изображается всегда в одну строку (для режима просмотра lvsIcon);

lvoNoScroll - никакой прокрутки в окне;

lvoNoSortHeader - не пытаться сортировать элементы при щелчке на кнопку заголовка колонки;

lvoHideSel - скрывать выделение, когда окно не в фокусе ввода;

lvoMultiselect - разрешает множественное выделение;

lvoSortAscending - сортировка по возрастанию;

lvoSortDescending - сортировка по убыванию (если не задана ни сортировка по возрастанию, ни по убыванию, то автоматическая сортировка не производится);

lvoGridLines - сетка линеек между колонками и строками;

lvoSubItemImages - колонки могут содержать собственные пиктограммы;

lvoCheckBoxes - в качестве изображений используются системные переключатели;

lvoTrackSelect - отслеживание курсора мыши, и дополнительные визуальные эффекты при пересечении курсором элементов;

lvoHeaderDragDrop - разрешается брать и перетаскивать заголовки колонок (режим lvsDetail), меняя порядок отображения

колонок;

lvoRowSelect - строка выделяется целиком, со всеми колонками;

lvoOneClickActivate - одиночный щелчок мыши активизирует элемент;

lvoTwoClickActivate - двойной клик мыши активизирует элемент;

lvoFlatsb - плоские линейки прокрутки;

lvoRegional - особый режим "прозрачности", при котором все клиентское пространство, кроме самих элементов и их пиктограмм, исключается из региона окна;

lvoInfoTip - автоматически создавать и изображать окошко, в котором отражается весь текст колонки под курсором мыши, если этот текст не виден полностью в самой колонке;

lvoUnderlineHot - подчеркивание активных элементов (под курсором мыши);

lvoMultiWorkares - использовать несколько рабочих областей в окне (для просмотра и автоматического упорядочивания в режиме lvsIcon);

lvoOwnerData - список является виртуальным, т.е. изначально не хранит сам никакие данные, а в обработчике события OnLVData получает их пользовательского кода;

lvoOwnerDrawFixed - список элементов одинаковой высоты, изображается пользовательским обработчиком OnDrawItem (этот стиль не следует использовать, если используется событие OnLVCustomDraw).

Во время исполнения стиль просмотра может быть изменен (или получен) свойством LVStyle. Более того, имеется возможность изменить любые опции общего списка динамически, используя свойства LVOptions.

По поводу стилей просмотра lvsDetail и lvsDetailNoHeader, следует заметить, что текст и изображение элементов списка в этих режимах отображается в колонках. Но колонки необходимо создать своим кодом (или на этапе разработке использовать редактор колонок). Если это не будет сделано, окно списка останется пустым, даже при наличии в нем элементов!

Для общего списка, в том числе с множественным выделением, в том числе для случая, когда выделенные элементы не являются соседними, продолжает работать свойство SelLength - оно возвращает количество выделенных элементов. Но в коде лучше использовать свойство LVSelCount.

Как обычно, для списковых контролов, работает и свойство Count (для него есть синоним - свойство LVCount), но для виртуального списка это свойство можно устанавливать, сообщая окну объекта, сколько элементов имеется (показывается) в списке.

П

римечание. Известен эффект "ошибочного" появления пустых (недоступных пользователю) строк перед самой первой строкой виртуального списка, если в момент изменения количества элементов линейка прокрутки не была в верхней позиции (режимы lvsDetail и lvsDetailNoHeader). Совершенно аналогичный эффект можно получить для виртуального списка TListView и в VCL. Избежать появления таких пустых строк можно, если до изменения свойства Count перевести объект в режим просмотра lvsList (например), установить значение Count в 0, а затем вернуть изображение в режим lvsDetail или lvsDetailNoHeade, аналогичным образом решается эта проблема и для приложений VCL. По крайней мере, в моих приложениях именно таким образом данный сбой удавалось устранить.

Событие OnMeasureItem (см. метод Set_LVItemHeight) может использоваться при наличии стиля lvoOwnerDrawFixed для того, чтобы программно задать высоту элемента, если высота, устанавливаемая системой по умолчанию, не устраивает. Лично я чаще использую другой способ: назначаю объекту список изображений (в соответствии с режимом просмотра - список для больших или маленьких пиктограмм, в зависимости от используемых режимов просмотров). Размер (высота) пиктограммы в таком списке изображений однозначно определяет и высоту элементов, лишь бы он был больше, чем высота используемого шрифта (если шрифт больше, то высота элемента устанавливается системой так, чтобы текст полностью входил по высоте). Если сам список изображений не используется, его необязательно заполнять чем-нибудь. Достаточно пустого списка, чтобы задать требуемую высоту элемента.

Как и для других списочных контролов, продолжают работать метод Clear (пожалуй, самый полиморфный метод для всех разновидностей оконных объектов).

Для общего списка характерно свойство

SetUnicode( b ) - переводит окно объекта в режим обработки Unicode-строк. Для обеспечения возможности работы с Unicode-строками в элементах списка, в опции проекта необходимо так же добавить символ условной компиляции UNICODE_CTRLS*;