Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Урок 16 - TKOLListView

Ведущий раздела KOL и MCK: Анатолий aka XVeL
Автор: Борис Моренко
WEB-сайт: http://kol.mastak.ru

Полную версию библиотеки KOL и MCK можно скачать здесь.

TKOLListView
Как и следует из названия это аналог TListView из VCL. Может быть 5-ти видов. За это отвечает свойство LVStyle (на панели задач Style).

lvsIcon Список в виде больших иконок и надписей снизу.
lvsSmallIcon Список в виде маленьких иконок и надписей снизу.
lvsList Обычный списко. Если есть иконки то они слева.
lvsDetai Таблица с заголовком сверху.
lvsDetailNoHeader Таблица без заголовка.

Для того что бы указать иконку надо бросить на форму TKOLImageList . Два раза кликнуть по нему и указать нужное изображение. Затем надо указать этот ImageList у TKOLListView изменить свойства ImageListNormal, ImageListSmall или ImageListSate.

Предположим что у нас есть гипотетический ListView (объект класса TKOLListView)
Для того что бы добавить пункт в список надо обратится к LVItemAdd.

ListView.LVItemAdd('Значение')

Но если у вашего ListView установлен стиль lvsDetai то через LVItemAdd вы сможете добавить текст только в первый столбец. Для того что бы добавить данные в остальные столбцы обратитесь к LVItems

ListView.LVItems[i, j] := 'значение';

i - строка
j - столбец
i и j нумеруется с нуля.
Разумеется перед тем как обращаться к этому j-му столбцу неплохо бы его создать. Для этого надо обратится к свойсву Columns или просто щелкнуть по объекту два раза. Появится диалог в котором все и настраивается.

Для того что бы узнать номер пункта выбранного пользователем надо обратится к CurIndex. А зная его вы сможите узнать и текст который написан в этом пункте:

ListView.LVItems[ListView.CurIndex, 0];

(если у вас стиль lvsDetai то 0 должен меняться на соответствующий номер столбца)

У TKOLListView есть свойство Options через которое указываются различные параметры для его настройки. Самые интересные (по моему мнению) ниже в таблице.

lvoAutoArrange Автоматически располагает иконки по всей поверхности ListView при изменение его размера (при Style =lvsIcon).
lvoEditLabel Можно редактировать надпись в списке
lvoHideSel Не один пункт нельзя выделить
lvoGridLines В режиме lvsDetai показываются разделительные линии таблицы.
lvoCheckBoxes Добавляет к каждому пункту флажок.
lvoRowSelect В режиме lvsDetai выделяется вся строка в таблице (а не только первая ячейка).
lvoMultiselect Есть возможность выделять несколько пунктов

Пару слов про lvoCheckBoxes. Благодяры ему вы сможете с легкостью сделать из TKOLListView аналог VCL TCheckListBox. Для того чтобы проверить установлен ли флажок на определенном пункте(или установить его) надо обратится к LVItemStateImgIdx.

ListView.LVItemStateImgIdx[i] := j

j - может принимать два значения: 1 - нет галочки ; 2 - галочка установлена.
i - это номер пункта. Если i равно -1 тогда идет обращение ко всем пунктам

Таким образом для того что бы снять все галочки надо написать следующую строку:

ListView.LVItemStateImgIdx[-1] := 1

К сожелению если вам надо например проверить выделены ли все пункты в списке то строка

if ListView.LVItemStateImgIdx[-1] = 1 then...

результата не даст. Тут надо переберать все пункты. Для того чтобы узнать количество пунктов надо обратится к LVCount. Если у вас стиль равен lvsDetai то количество столбцов узнается через LVColCount.

Если у вас в опциях присутствует lvoMultiselect вы сможете выделить несколько пунктов.
Для того чтобы узнать номера первого выделенного пункта нам надо обратится к CurIndex. После чего обращаясь к LVNextSelected можно перебрать все пункты. Если больше нет выделенных пунктов LVNextSelected возвращает -1. Пример перебора:

var
  i, j: Integer;
begin
  i := ListView.LVCurItem;
  if ListView.LVSelCount > 0 then
  repeat
    MsgOK('Выделеный пункт №' + Int2Str(i));
    j := ListView.LVNextSelected(i);
    i := j;
  until j < 0;
 ...

LVSelCount - количество выделенных пунктов.

Краткая справка по свойствам TKOLListView

LVItemAdd Добавить запись
LVItems Обратится к записи
CurIndex Номер выделено записи
LVItemStateImgIdx Проверка флажка
LVCount Количество записей
LVColCount Количество столбцов при стиле lvsDetai
LVNextSelected Следующий выделенный пункт
LVSelCount количество выделенных пунктов.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay