Delphi 6 программирование

       

Редактор компонента



Рисунок 18.28. Редактор компонента


Чтобы начать наполнение, щелкните по кнопке 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

- вставляет непосредственно перед узлом



Содержание раздела