Окно редактора списка объектов компонента ListView
Если вы хотите предоставить пользователю возможность изменять вид списка, сделайте следующее:
- введите в приложение разделы меню Крупные значки (пусть его имя будет MIcon), Мелкие значки (имя MSmallIcon), Список (имя MList) и Таблица (имя MReport)
- установите во всех этих разделах одинаковый отличный от нуля индекс GroupIndex и свойства RadioItem в true
- один из разделов пометьте как Checked и в свойстве списка ViewStyle установите значение, соответствующее этому разделу
- напишите следующие обработчики щелчков для этих разделов: procedure TForm1.MIconClick(Sender: TObject); begin ListView1.ViewStyle:=vsIcon; MIcon.Checked:=true; end; procedure TForm1.MSmallIconClick(Sender: TObject); begin ListView1.ViewStyle:=vsSmallIcon; MSmallIcon.Checked:=true; end; procedure TForm1.MListClick(Sender: TObject); begin ListView1.ViewStyle:=vsList; MList.Checked:=true; end; procedure TForm1.MReportClick(Sender: TObject); begin ListView1.ViewStyle:=vsReport; MReport.Checked:=true; end;
Основное свойство компонента, описывающее состав отображаемой информации — Items. Во время проектирования оно может быть установлено специальным редактором (Рисунок 3.21), вызываемом щелчком на кнопке с многоточием рядом с этим свойством в окне Инспектора Объектов. Оно похоже на окно, описанное для компонента TreeView (Рисунок 3.20). Точно так же в нем задаются новые узлы кнопкой New Item и дочерние узлы — кнопкой New SubItem. Только смысл дочерних узлов другой: это информация, которая появляется только в режиме vsReport — в виде таблицы.
Для каждого узла задается свойство Caption — надпись, появляющаяся около пиктограммы. Для дочерних узлов это свойство соответствует надписи, появляющейся, в ячейках таблицы в режиме vsReport.
Свойство Image Index определяет индекс пиктограммы. Индекс соответствует спискам изображений, хранящимся в отдельных компонентах ImageList (см. ). Указания на эти компоненты вы можете задать в свойствах LargeImages для режима vsIcon и SmallImages для режимов vsSmallIcon, vsList и vsReport. Индексы начинаются с 0. Если вы укажете индекс -1 (значение по умолчанию), пиктограммы изображаться не будут. Свойство State Index в панели Item Properties позволяет добавить вторую пиктограмму в данный объект. Подобная пиктограмма может просто служить дополнительной характеристикой объекта. Индекс, указываемый как State Index, соответствует списку изображений, хранящихся в отдельном компоненте ImageList, указанном в свойстве StateImages компонента ListView.
Свойство Columns определяет список заголовков таблицы в режиме vsReport при свойстве ShowColumnHeaders (показать заголовки), установленном в true. Свойство Columns можно задать в процессе проектирования специальным редактором заголовков, вызываемом двойным щелчком на компоненте ListView или щелчком на кнопке с многоточием рядом со свойством Columns в окне Инспектора Объектов. Редактор заголовков уже (см. Рисунок 3.19).
Свойство Checkboxes определяет отображение индикатора с флажком около каждого элемента списка. Индикаторы можно устанавливать программно или их может изменять пользователь во время выполнения. Тогда узнать программно, установлен ли индикатор в некотором элементе Items[i], можно проверкой его свойства Checked. Например: for i:=0 to ListView1.Items.Count-1 do if ListView1.Items[i].Checked then ...;
Свойства HotTrack и HotTrackStyles определяют появление выделения при перемещении курсора над элементом списка и стиль этого выделения. Свойство HoverTime (только в Delphi 5) задает в миллисекундах задержку появления такого выделения.
Свойство списка Selected определяет выделенный пользователем элемент списка.
Свойство DragMode определяет режим перетаскивания элементов списка. Если вы хотите разрешить пользователю перетаскивать пиктограммы по площади списка в режимах vsIcon и vsSmallIcon, вам надо сделать следующее:
- установить DragMode = dmAutomatic
- установить DragKind = dkDrag
- написать обработчик события OnDragOver списка: Accept := Source = ListView1;
- написать обработчик события OnDragDrop списка: (Source as TListView).Selected.Position:=Point(X,Y);
- если вы предоставили пользователю возможность выбирать вид отображения списка с помощью описанных ранее разделов меню, то в обработчиках щелчка на MIcon и MSmallIcon надо написать операторы ListView1.DragMode:=dmAutomatic; а в обработчиках щелчка на MList и МReport надо написать операторы ListView1.DragMode:=dmManual;
Метод Arrange: procedure Arrange(Code: TListArrangement); позволяет упорядочить пиктограммы в режимах vsIcon и vsSmallIcon. Параметр Code определяет способ упорядочивания:
В Delphi 5 введено еще одно свойство ListView — WorkAreas.
Это свойство определяет рабочую область (прямоугольную рамку), в которой осуществляется выравнивание пиктограмм в режимах vsIcon и vsSmallIcon. Свойство WorkAreas представляет собой индексированный список, аналогичный Items, но совершенно независимый от него. Если WorkAreas — пустой список (ни одна область в него не добавлена), то упорядочивание пиктограмм производится в пределах всей клиентской области ListView. Добавление новой рабочей области осуществляется методом Add. Свойство рабочей области Rect типа TRect (см. ) определяет границы области. Свойство Color определяет цвет рамки, обрамляющей область. Свойство DisplayName определяет подпись под рамкой. И рамка, и подпись отображаются только в случае, если свойство списка ShowWorkAreas установлено в true.
Пример операторов, создающих в площади списка две рабочие области: ListView1.WorkAreas.Add; ListView1.WorkAreas[0].Rect := Rect(0,0, ListView1.ClientWidth div 4, ListView1.ClientHeight div 2); ListView1.WorkAreas.Items[0].DispiayName := 'Область 0'; ListView1.WorkAreas.Items[0].Color := clRed; ListView1.WorkAreas.Add; ListView1.WorkAreas[1].Rect := Rect(ListView1.ClientWidth div 2, 0, (ListView1.ClientWidth div 4)*3, ListView1.ClientHeight div 2); ListView1.WorkAreas.Items[1].DisplayName := 'Область 1';
Упорядочивание пиктограмм происходит в пределах той области, в которой они находятся. Если вы разрешили пользователю перетаскивать пиктограммы, как было описано ранее, то вид выравнивания будет зависеть от расположения пиктограмм. Если одна или несколько из них расположены в пределах одной области, а другие размещаются вне рабочих областей, то при вызове метода Arrange все они расположатся в пределах той области, в которой была хоть одна пиктограмма. Если же пиктограммы были расположены в нескольких рабочих областях, то они будет упорядочиваться в пределах областей их размещения.
Способ упорядочивания определяется соответствующим заданием свойства SortType, которое уже рассматривалось нами для компонента TreeView.