В основном приходится работать с отдельными элементами древовидного списка - объектами класса TTreeNode. Об основных способах получения указателей на эти самые ноды я уже говорил. Теперь настало время рассмотреть методы и свойства самого TreeView.
Свойства
- DropTarget
- Содержит указатель на узел, являющийся областью сброса объекта (drop target). При операциях перетаскивания это свойство является довольно полезным. Кроме того, установка этого совйства автоматически изменяет статус узла на цель сброса.
- HideSelection
- Аналогично TRichEdit::HideSelection определяет, остается ли видимым выделении элемента TreeView при отсуствии фокуса окна, например, при переключении на другое окно.
- HotTrack
- "Горячая дорожка" - выделение нод дерева при прохождении над ними курсора мыши.
- Images, StateImages
- Иконки для нод. Первое свойство определяет основные иконки, а второе - изображения состояния, state images, находящиеся слева от основной.
- Indent
- Отступ каждой субноды от родительской, включая ноды высшего уровня.
- Items
- Это уже было :) - элементы дерева.
- ReadOnly
- Запрещает редактирование элемнтов дерева.
- RightClickSelect
- Разрешает выбор нод правой клавишей а ля Windows Commander (или кто знает Norton Commander ^)).
- RowSelect
- Выделяется ли ряд целиком. Маленькое пояснение. Выделяться может только надпись, или вся гризонтальная область, занятая под эту надпись.
- Selected
- Указатель на выделенный узел.
- ShowButtons, ShowLines, ShowRoot
- Видно ли соответственно - кнопки "+/-" раскрытия вложенных потомков; линий, проходящих от родителей к потомкам; корня дерева.
- SortType
- Сортировка узлов дерева. Если stData, то при изменении свойства Data. Если stText, то при изменении свойства Text. Логично, что stBoth сортирует без разбора по обоим поводам :)). Дата - данные, укзатель соответствующий TreeNode а. Для сортировки по данным придется написать обработчик OnCompare, как, покажу...
- ToolTips
- Логическое свойство, определяет, возникать ли Application::OnHint событию при проведении мыши над элементом дерева.
- TopItem
- Указатель на самую верхнюю ноду.
Во как! Теперь методы...
- AlphaSort
- Рассортировывает элементы дерева по алфавиту.
- CustomSort
- Описание:
typedef int (CALLBACK *PFNTVCOMPARE)(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
bool __fastcall CustomSort(PFNTVCOMPARE SortProc, int Data);
Некотрый аналог OnCompare. Для каждого элемента одного уровня в TreeViewвызывается функция, описанная как PFNTVCOMPARE. Два первых параметра определяют два узла TreeView, а третий - Data. Ну например:
int __fastcall CompareFunc(TTreeNode *Node1,TTreeNode *Node2, int Data)
{
if(...) //здесь происходит сравнение
return -1; //если Node1 должна идти впереди Node2
if(...)
return 1; //наоборот
if(...)
return 0; //если ноды равны
}
- FullCollapse, FullExpand
- Void функции и по retval и по параметрам. Соответственно полное сворачивание элементов дерева и их полное разворачивание.
- GetHitTestInfoAt
- Описание:
THitTests __fastcall GetHitTestInfoAt(int X, int Y);
Получить сведения о какой-либо точке дерева. Прошу обратить вниммание, что точка должна быть задана не в глобальных координатах или координатах относительно формы, а локальных координатах данного TreeView. Возвращает множество THitTests, значения у которого могут быть следующие:
- htAbove, htBelow
- Ниже или выше клиентской области.
- htNowhere
- Внутри элемента управления, но ни на каком дочернем элементе.
- htOnItem, htOnButton, htOnIcon
- Соответственно на элементе (ноде, элементе списка и т.д.), на кнопке BUTTON, или на иконке.
- htOnIndent
- На области перед элементом - области отступа.
- htOnLabel
- На подпись.
- htOnRight
- С правой стороны ноды.
- htOnStateIcon
- На иконке состояния.
- htToLeft
- На левую часть клиентской области.
- htToRight
- На правую часть.
- GetNodeAt
- Возвращает указатель на ноду с координатами X и Y. Координаты относительно левого верхнего угла TreeView.
- IsEditing
- Возвращает true если какой-либо узел подвергается редактированию. То есть его подпись нагло меняет юзер :). Напомню, что, чтобы такого не допустить, надо свойство ReadOnly установить в true.
- LoadFromFile, LoadFromStream, SaveToFile, SaveToStream
- Соответственно загрузить или сохранить в файл или поток. Тут некоторые пояснения. Получающийся файл - текстовой ASCII-encoded со следующий иерархией - каждый потомок отстоит от родителя на TAB. Вобщем-то то же самое получается. Ну например:
My top element
Child 1-1
Child 1-2
Child 1-2-1
My second top element
Child 2-1
Child 2-2
Child 2-2-1
Child 2-2-1-1
И так до бесконечности :). В данном случае получится вот что:
Вот и все. Там еще всякие разные события, но во-первых у них названия сами за себя говорят, во-вторых все равно мы позже на примере создания чего-нибудь вроде дерева каталогов рассматривать будеи, ну и в третьих - и так много места на него потратили :).