18.3.13. TListView - список просмотра

Компонент TListView предназначен для показа и выбора нескольких элементов. Каждый элемент может содержать пиктограмму и текст и подобно TTreeView иметь список связанных с ним подэлементов. В отличие от TTreeview в TListView допускается не более одного уровня вложенности подэлементов. TListView показывает свои элементы в одной или нескольких колонках, с крупными или мелкими пиктограммами, а также в виде “отчетов”, представляющих элементы в двухмерной таблице: по вертикали изображаются элементы верхнего уровня, по горизонтали - вложенные подэлементчатели, упрощающие множественный выбор элементов.

Компонент может наполняться как на этапе конструирования, ты. Рядом с элементами могут показываться независимые переклютак и на этапе прогона программы

Выполните следующую несложную программу, которая продемонстрирует вам основные особенности использования компонента.

На Пустую форму положите компоненты TListView, TImageList, TComboBox И TCheckBox.

- Компонент ImageList1 будет служить контейнером для нескольких пиктограмм, отображаемых компонентом Listview. Для наполнения контейнера дважды щелкните по нему мышью или нажмите на нем правую кнопку и выберите продолжение ImageList Editor.
- В появившемся окне редактора imageList нажмите кнопку Add и выберите файл images | ICONS | CHEMICAL[ См. замечание в начале главы. ].
- Повторите п. 3 для выбора нескольких пиктограмм. Обратите внимание, что каждой помещаемой в imageListi пиктограмме редактор присваивает уникальный индекс.
- Напишите такой обработчик события oncreate для формы:

procedure TForm1.FormCreate(Sender: TObject);

var

k: Integer;

Listltem: TListItem;

begin

with ListView1 do

begin

// Указываем источник изображений:

Smalllmages := ImageList1;

Largelmages := ImageList1;

// Наполняем ListViewl пиктограммами и текстом:

for k := 0 to ImageListI.Count - 1 do

begin

// Добавляем элемент и получаем ссылку на него

Listltem := Items.Add;

// Указываем индекс связанного изображения

Listltem.Imagelndex := k;

// Вставляем надпись ImageN

Listltem.Caption := 'Image' + IntToStr(k);

end;

// Наполняем список ComboBoxl доступными стилями ListView ComboBoxl.Items.AddObject('vslcon', TObject(vslcon)) ;

ComboBoxl.Items.AddObject('vsLisf, TObject (vsList)) ;

ComboBoxl.Items.AddObject('vsReporf, TObject(vsReport)) ;

ComboBoxl.Items.AddObject('vsSmall Icon',

TObject(vsSmallIcon)) ;

// Показываем первый стиль в Combo Box

ComboBoxl.Itemlndex := 0;

// Создаем колонку для режима vsReport:

Columns.Add; Columns[0].Caption := 'Колонка T;

Columns [.0 ] .Width := 80;

end;

end;

- Напишите такие Обработчики событий ComboBoxl.OnChange И A. CheckBoxl.Click:

procedure TFormI.ComboBoxIChange(Sender: TObject);

begin

with ComboBoxl do

ListViewl.ViewStyle := TViewStyle(

I terns.Objects[Itemlndex]) ;

end;

procedure TFormI.CheckBoxIClick(Sender: TObject);

begin

ListViewl.CheckBoxes := CheckBoxl.Checked

end;

Некоторые важные свойства компонента:

property AllocBy: Integer; | Используется перед вставкой большого количества элементов: для экономии времени и памяти перед добавлением установите в это свойство количество добавляемых элементов
property Checkboxes: Boolean; | Разрешает/запрещает показ независимых переключателей рядом с элементами
property Column[Index: Integer]: TListColumn; | Открывает доступ к колонкам элементов по их индексам
property ColumnClick: Boolean; | Разрешает/запрещает генерацию события OnColumnClick
property Columns: TListCoiumns; | Содержит объект-колонки. Используйте это свойство для удаления или добавления колонок, а также для изменения их свойств. Колонки видны только для режима View-Style = vsReport. И наоборот: элементы в этом режиме видны, только если определена хотя бы одна колонка
property GridLines: Boolean; | Разрешает/запрещает показ линий в режиме ViewStyle = vsReport
property HideSelection: Boolean; | Запрещает/разрешает сохранять выбор элементов при потере компонентом фокуса ввода
property HotTrack: Boolean; | Разрешает/запрещает подсветку элементов, над которыми проходит указатель мыши
property IconOptions: TIconOptions; | С помощью объекта класса TiconOptions задаются дополнительные условия отображения (см.ниже)
property Items: TListItems; | Содержит список всех элементов
property Largelmages: TImageList; | Указывает источник крупных пиктограмм
property MultiSelect: Boolean; | Разрешает/запрещает множественный выбор
property Readonly: Boolean; | Запрещает/разрешает редактирование надписей
property ShowColumnHeaders: Boolean; | Разрешает/запрещает показ заголовков колонок в режиме ViewStyle = vsReport
property Smalllmages: TImageList; TSortType = (stNone, stData, stText, stBoth) ; property SortType: TSortType; | Указывает источник мелких пиктограмм Указывает способ сортировки элементов
property Statelmages: TImageList; | Указывает источник пиктограмм для вы бранных элементов
TViewStyle = (vslcon, vsSmallI- con, vsList, vsReport) ; property ViewStyle: TViewStyle; | Определяет стиль показа элементов: vslcon - крупные пиктограммы; vsSmalllcon - мелкие пиктограммы; vsList - список пиктограмм; vsReport - таблица пиктограмм

Обратите внимание: чтобы компонент работал в режиме vsReport, необходимо создать хотя бы одну колонку. На этапе конструирования программы колонки создаются и изменяются с помощью редактора колонок, окно которого открывается после щелчка по компоненту правой кнопкой и выборе в локальном меню опции

Column Editor. Пример программного создания колонки показан на стр.483.

Класс TIconOption определяет дополнительные условия отображения узлов и имеет такие свойства:

type TIconArrangement = (iaTop, iaLeft) ; property Arrangement: TIconArrangement; property AutoArrange: Boolean; property WrapText: Boolean; | Показывает способ расположения изображения: iaTop - слева направо (вверху колонки); iaLeft - сверху вниз слева от ряда колонок Если содержит True, элементы будут автоматически располагаться правильными рядами при изменении их количества Если содержит True, текст элемента может переноситься на границах слов на несколько строк, если он выходит за границы пиктограммы

При программном заполнении компонента центральную роль играет свойство Items класса TListItems.

Свойства класса TListItems:

property Count: Integers-property Item[Index: Integer]: TListItem; | Содержит количество элементов в item Открывает индексный доступ к элементам списка
Методы класса TListItems:
function Add: TListItem; procedure Assign(Source: TPersis-tent); override; procedure BeginUpdate; procedure Clear; procedure Delete(Index: Integers-procedure EndUpdate;” function IndexOf(Value: TListItem) : Integers-function Insert(Index: Integer): TListItem; procedure SetCount(Value: Integer) ; | Добавляет очередной элемент к списку Связывает список компонента со списком компонента source Блокирует обновление экрана до тех пор, пока не будет выполнен метод EndUpdate. Используется при одновременной вставке нескольких элементов списка для предотвращения мерцания экрана Очищает список Удаляет элемент списка с индексом index Отменяет действие BeginUpdate Возвращает индекс узла value Вставляет новый элемент после элемента, заданного индексом index Устанавливает новое количество компонентов списка

Свойство item типа TListItem открывает индексированный доступ к подэлементам конкретного элемента верхнего уровня (допускается только два уровня иерархии элементов). За информацией по этому классу обратитесь к справочной службе Delphi.