Чтобы начать наполнение, щелкните по кнопке New item и введите связанный с узлом текст в поле Text. С помощью image index панели item properties устанавливается индекс связанной с узлом пиктограммы, с помощью selected index - индекс пиктограммы для выбранного узла. Для ввода подузла любого уровня сначала нужно щелкнуть в окошке Items по узлу, который должен стать родительским, и лишь затем - на кнопке New subitem.
Для ввода списка в режиме прогона программы широко используется центральное свойство компонента - items типа TTreeNodes, открывающее индексированный доступ ко всем узлам списка. Каждый узел описывается классом TTreeNode, имеющим свои собственные методы и свойства. В частности, его свойство item содержит список всех подузлов данного узла; с помощью многочисленных методов свойства TTreeview. items к этому списку можно добавить новый подузел, а с помощью метода TTreeNode. MoveTo - переместить узел в любую позицию дерева иерархии.
Следующий обработчик события oncreate формы создал Рисунок 18.29:
procedure TFor.gif" >
Puc. 18.29. Создание подузлов на этапе прогона программы
Свойства компонента TTreeview:
lean;TBorderStyle =
bsNone..bsSingle; property BorderStyle: TBorderStyle; |
Определяет стиль рамки, охватывающей компонент: bsNone - нет рамки; bsSingle - рамка толщиной в 1 пиксель | ||
property ChangeDelay: Integer; | Указывает задержку (в миллисекундах) перед раскрытием узла | ||
property DropTarget: TTreeNode; | Указывает узел, который может служить приемником операций Drag&Drop | ||
property HideSelection:Boolean; | Указывает, будет ли убираться выделение узлов, когда компонент теряет фокус ввода | ||
property Images: TImageList; | Содержит набор изображений, которые будут использоваться при прорисовке узлов | ||
property Indent: Integer; | Определяет отступ в пикселях от левого угла узла для всех его подузлов | ||
property Items: TTreeNodes; | Открывает доступ к любому узлу по его индексу.
Индексация начинается с нуля и соответствует просмотру всех узлов полностью раскрытого списка |
||
property MultiSelect: Boo
lean; |
Разрешает/запрещает одновременный выбор несколь ких узлов | ||
type TMultiSelectStyles =
(msControlSel-ect, msShift Select, msVisibleOnly, msSiblingOnly) ; TMultiSelectStyle = set of TMultiSelectStyles; property MultiSelectStyle: TMultiSelect-Style default [msControlSelect]; |
Определяет способ выбора нескольких узлов: msControiselect - с нажатой и удерживаемой клавишей Ctrl для выбора узлов в произвольном порядке;
msShiftSelect - с нажатой и удерживаемой клавишей Shift для выбора сплошного диапазона; msVisibleOnly - подобно msShiftSelect, но в диапазон не включаются дочерние нераскрытые узлы; msSiblingOnly - подобно msShiftSelect, но в диапазон включаются только узлы одного уровня |
||
property Readonly: Boolean; | Запрещает/разрешает редактирование надписей в узлах | ||
property RightClickSelect:
Boolean; |
Разрешает выбор узлов правой кнопкой мыши | ||
property Selected:
TTreeNode; |
Содержит список всех выбранных узлов или nil, если таких нет | ||
property SelectionCount:
Cardinal; |
Содержит количество выбранных узлов | ||
property Selections[Index:
Integer]: TTreeNode; |
Обеспечивает индексированный доступ к выбранным узлам | ||
property RowSelect: Boolean; | Разрешает цветовыделение линий выбранных узлов. Игнорируется, если showLinesFalse | ||
property ShowButfcons: Boolean; | Разрешает/запрещает показ стандартных кнопок раскрытия подузлов. По умолчанию содержит True. Если False, узел раскрывается двойным щелчком мыши | ||
property ShowLines: Boolean; | Разрешает/запрещает показ линий | ||
property ShowRoot: Boolean; | Разрешает/запрещает показ линий, идущих от самого верхнего уровня иерархии. Игнорируется, если ShowLines=False | ||
TSortType = (stNone,
stData, stText, stBoth) ; property SortType: TSort Type; |
Указывает способ сортировки узлов: stNone - нет сортировки; stData - сортировка по данным; stText - сортировка по тексту надписей; stBoth - сортировка по тексту и по данным. См. также событие OnCompare | ||
property Topitern: , TTreeNode; | Определяет корневой узел | ||
Методы компонента: |
function AlphaSort: Boolean; TTVCompare = function (IParamI, lParam2, IParamSort: Longint) Integer stdcall; tfunction CustomSort(SortProc: TTVCompare; Data: Longint): Boolean; | Сортирует узлы по тексту и возвращает
True, если сортировка прошла успешно Определяет нестандартную сортировку с помощью функции SortProc. Эта функция должна рассматривать IParamI и lParam2 как объекты TTreeNode и возвращает отрицательное число, если lParaml<lParam2; ноль, если IParamel^lParamS; положительное число, если lParaml>lParam2 |
||
procedure FullCollapse; | Прячет все узлы, кроме узлов самого верх
него уровня иерархии |
||
Procedure FullExpand; | Показывает все узлы дерева иерархии |
function GetNodeAt(X, Y: Integer) : TTreeNode; | Возвращает узел, располагающийся в указанной точке, или nil, если точка не принадлежит ни одному узлу |
function IsEditing: Boolea' | Возвращает True, если пользователь редактирует какой-либо узел |
procedure LoadPromFile(const
FileName: String); |
Загружает дерево иерархии из файла |
procedure SaveToFile(const File
Name: String) ; |
Сохраняет в файле дерево иерархии |
procedure SaveToStream(Stream: TStream) ; | Сохраняет в потоке данных дерево иерархии
события: С компонентом связаны такие |
TTVChangedEvent = procedure(Sender: TObject; Node: TTreeNode) of object; property OnChange: TTVChangedE vent; | Возникает при смене состояния выбора у
одного из узлов. Node - узел, который изменил состояние |
TTVChangingEvent = procedure(
Sender: TObject; Node: TTreeNode; var AllowChange: Boolean) of objectproperty OnChangir.g: TTVChang ingEvent; |
Возникает перед сменой состояния выбора
у одного из узлов. Node - узел, который будет выбран. Обработчик в параметре AllowChange разрешает или запрещает выбор узла |
TTVExpandedEvent = procedure(
Sender: TObject; Node: TTreeNode) of object;property OnCollapsed: TTVExpand edEvent; |
Возникает при закрытии списка подузлов узла Node |
TTVCollapsingEvent = procedure(
Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean) of object; property OnCollapsing: TTVCollapsingEvent; |
Возникает перед закрытием списка подуз лов узла Node. В параметре AllowCollapse обработчик разрешает или запрещает закрыть список |
TTVCompareEvent = procedure(
Sender: TObject; Nodel, Node2: TTreeNode; Data: Integer; var Compare: Integer) of object; property OnCompare: TTVCom pareEvent; |
Возникает при сравнении двух узлов
Nodel И Node2. В параметре Compare обработчик должен вернуть отрицательное число, если Nodel<Node2; ноль, если Model=Node2; положительное число, если Nodel>Node2 |
TTVExpandedEvent = procedure(
Sender: TObject; Node: TTreeNode) of object; property OnDeletion: TTVExpand edEvent; |
Возникает при удалении узла Node из дерева иерархии |
TTVEditedEvent = procedure(Sender: TObject; Node:
TTreeNode; var S: String) of object; property OnEdited: TTVEditedEvent; |
Возникает при завершении редактирования надписи в узле Node: S - новая надпись |
TTVExpandedEvent = procedure(
Sender: TObject; Node: TreeNode) of object; property OnExpanded: TTVExpand edEvent; |
Возникает при распахивании списка подузлов узла Node |
TTVExpandingEvent = procedure(
Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean) of object; property OnExpanding: TTVExpand ingEvent; |
Возникает перед открытием списка подузлов узла Node. В параметре AllowExpansion обработчик разрешает или запрещает
открыть список |
TTVExpandedEvent = procedure(
Sender: TObject; Node: TreeNode) of object;property OnGetImageIndex: TTVEx pandedEvent; |
Возникает при необходимости получения
индекса изображения для прорисовки узла Node в обычном состоянии |
TVExpandedEvent == procedure(
Sender: TObject; Node: TTreeNode) of object; property OnGetSelectedIndex: TTVExpandedEvent; |
Возникает при необходимости получения
индекса изображения для прорисовки узла Node в выбранном состоянии |
При программном заполнении списка следует пользоваться свойством TTreeView. Items класса TTreeNodes.
Свойства класса TTreeNodes:
property Count: Integer; property Item[Index: Integer]: TTreeNode; default-property Owner: TCustomTreeView; | Количество узлов, входящих в items Открывает индексированный доступ к узлам Содержит ссылку на родительский список |
Методы класса TTreeNodes: | |
function Add(Node: TTreeNode; const S: String): TTreeNode;
function AddChild(Node: TTreeNode; const S: String): TTreeNode; function AddChildFirst(Node: TTreeNode; const S: String): TTreeNode; function AddChildObject(Node: TTreeNode; const S: String; Ptr: Pointer): TTreeNode; function AddChildObjectFirst( Node: TTreeNode; const S: String; Ptr: Pointer): TTreeNode; |
Добавляет узел в конец того списка, в котором зарегистрирован узел Node. Если Node=NlL, добавляется корневой узел для всего компонента Добавляет узел в конец списка item дочерних узлов узла Node
Добавляет узел в начало списка Item дочерних узлов узла Node Добавляет узел и данные в конец списка item дочерних узлов узла Node. На данные ссылается указатель Ptr. Связанная с данными область памяти не освобождается автоматически при уничтожении списка Добавляет узел и данные в начало списка item дочерних узлов узла Node. На данные ссылается указатель Ptr. Связанная с данными область памяти не освобождается автоматически при уничтожении списка |
function AddFirst(Node:
TTreeNode; const S: String): TTreeNode; |
Добавляет узел в начало того списка, в котором зарегистрирован узел Node |
function AddObject(Node:
TTreeNode; const S: String; Ptr: Pointer): TTreeNode; |
Добавляет узел и данные в конец того же списка, в котором зарегистрирован узел
Node. На данные ссылается указатель Ptr. Связанная с данными область памяти не освобождается автоматически при уничтожении списка |
function AddObjectFirst(Node:
TTreeNode; const S: String; Ptr: Pointer): TTreeNode; |
Добавляет узел и данные в начало того же списка, в котором зарегистрирован узел Node. На данные ссылается указатель Ptr. Связанная с данными область памяти не освобождается автоматически при уничтожении списка |
procedure Assign(Source: TPersistent) ; | Связывает список текущего компонента со списком компонента Source |
procedure BeginUpdate; | Блокирует обновление экрана до тех пор, пока не будет выполнен метод EndUpdate.
Используется при одновременной вставке нескольких элементов списка для предотвращения мерцания экрана |
procedure Clear; | Очищает список всех узлов и подузлов компонента |
procedure Delete(Node:
TTreeNode); |
Уничтожает узел Nods |
procedure EndUpdate; | Отменяет действие метода BeginUdate |
function GetFirstNode: TTreeNode; | Возвращает самый первый узел в списке Items[0] |
function GetNode(Itemid:
HTreeItem): TTreeNode; |
Возвращает узел по его идентификатору Itemid |
function Insert(Node: TTreeNode;
const S: String): TTreeNode; |
Вставляет узел непосредственно перед узлом Node |
function InsertObj ect(Node:
TTreeNode; const S: String; Ptr: Pointer): TTreeNode; |
Вставляет узел и данные непосредственно
перед узлом Node |
Как уже отмечалось, каждый узел класса TTreeNode имеет свой набор методов, свойств и событий.
Свойства TTreeNode:
property Absolutelndex: Integer; | Возвращает абсолютный индекс узла (с учетом всех подузлов) |
property Count: Integer; | Содержит количество подузлов в списке Item |
property Cut: Boolean; | Вырезает узел и помещает его в clipboard |
property Data: Pointer; | Указывает на связанные с узлом данные |
property Deleting: Boolean; | Содержит True, если для узла вызван De-story |
property DropTarget: Boolean; | Содержит True, если узел может служить приемником операции Drag&Drop |
property Expanded: Boolean; | Содержит True, если узел распахнут |
property Focused: Boolean; | Содержит True, если узел сфокусирован |
property HasChildren: Boolean; | Содержит True, если узел имеет дочерние узлы |
property Imagelndex: TImageIndex; | Содержит индекс связанной с узлом пиктограммы |
property Index: Longint; | Содержит индекс узла в списке дочерних узлов его родительского узла |
property IsVisible: Boolean; | Содержит True, если узел виден |
property Item[Index: Integer]:
TTreeNode; |
Открывает индексированный доступ ко всем дочерним узлам |
property Itemid: HTreeItem; | Содержит уникальный Windows-дескриптор узла |
property Level: Integer; | Содержит иерархический уровень узла |
property Overlaylndex: Integers- | Содержит индекс оверлейной пиктограммы.
Оверлейная пиктограмма вычерчивается поверх основной, чтобы, например, указать, что узел стал недоступен |
property Owner: TTreeNodes; | Содержит ссылку на владельца данного узла |
property Parent: TTreeNode; | Содержит ссылку на родительский узел |
property Selected: Boolean; | Содержит True, если узел выделен цветом |
property Selectedlndex: Integer; | Содержит номер пиктограммы для выделенного узла |
property Text: Strings- | Содержит текст узла |
property TreeView: TCustomTree-
View; |
Содержит ссылку на компонент TreeView, к которому принадлежит узел |
Методы класса TTreeNode:
function AlphaSort: Boolean; | Сортирует узлы по алфавиту свойств Text и возвращает True в случае успеха |
procedure Assign(Source: TPersis tent); override; | Связывает список подузлов с источником Source |
procedure Collapse(Recurse: Boolean) ; | Закрывает все узлы (Recource=True) или только распахнутые(Resource=False) |
type TTVCompare = function(
IParamI, lParam2, IParamSort: Longint): Integer stdcall; func tion CustomSort(SortProc: TTVCom pare; Data: Longint): Boolean; |
Реализует нестандартную сортировку узлов |
procedure Delete; | Удаляет текущий узел |
procedure DeleteChildren; | Удаляет дочерние узлы |
function DisplayRect(TextOnly:
Boolean): TRect; |
Возвращает очерчивающий прямоугольник узла. Если TextOnly=True - возвращает
очерчивающий прямоугольник текста |
function EditText: Boolean; | Переводит текст узла в режим редактирования |
procedure EndEdit(Cancel Boo
lean) ; |
Заканчивает редактирование текста и со храняет его изменения, если Cancel=False |
procedure Expand(Recurse: Boo
lean) ; |
Открывает узел (и его подузлы, если Recurce=True) |
function GetFirstChild: TTreeNode; | Возвращает ссылку на первый подузел или nil, если нет подузлов |
function GetLastChild: TTreeNode; | Возвращает ссылку на последний подузел или nil, если нет подузлов |
function GetNext: TTreeNode;
function GetNextChild(Value: TTreeNode): TTreeNode; |
Возвращает ссылку на очередной подузел dозвращает ссылку на подузел после value
(или nil, если такового нет). |
function GetNextSibling:
TTreeNode; |
Возвращает ссылку на очередной узел в том же списке. |
function GetNextVisible:
TTreeNode; |
Возвращает ссылку на очередной видимый узел (для которого раскрыты все дочерние
узлы) |
function GetPrev: TTreeNode; | Возвращает ссылку на предыдущий узел в том же списке независимо от его видимости |
function GetPrevChild(Value:
TTreeNode): TTreeNode; |
Возвращает ссылку на предыдущий по отношению к value дочерний узел |
function GetPrevSibling:
TTreeNode; |
Возвращает ссылку на предыдущий узел того же уровня |
function GetPrevVisible:
TTreeNode; |
Возвращает ссылку на видимый узел того же уровня |
function HasAsParent(Value:
TTreeNode): Boolean; |
Возвращает True, если value - родительский узел |
function IndexOf(Value:
TTreeNode): Integer; |
Возвращает идентификатор узла value |
procedure MakeVisible; | Если родительский узел видимый, делает видимыми все дочерние узлы |
type TNodeAttachMode = (naAdd,
naAddFirst, naAddChild, naAddChildFirst, nalnsert) ; procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttach Mode) ; |
Перемещает текущий узел в позицию относительно Destination в зависимости от параметра Mode: naAdd - добавляет в конец списка узла того же уровня; naAddFirst -
делает первым в списке узлов того же уровня; naAddchild - добавляет в конец списка дочерних узлов; naAddChildFirst -делает первым в списке дочерних узлов; nalnsert - вставляет непосредственно перед узлом |