Иерархические структуры в Delphi (часть 3)

TTreeView

Иерархия классов: TObject->TPersistent->TTreeNodes

Класс TTreeNode отображает индивидуальный узел дерева

Unit

ComCtrls

Описание

Каждый узел в дереве состоит из метки и дополнительного растрового изображения. Каждый узел может быть родителем списка дочерних узлов. Щелкая по узлу, пользователь может развернуть или свернуть связанный список дочерних узлов.

clip_image003[108] Свойства TTreeNode

В классе TTreeNode

clip_image005[26] AbsoluteIndex

clip_image005[27] Count

Cut

Data

clip_image005[28] Deleting

clip_image005[29] DropTarget

Expanded

Focused

clip_image005[30] Handle

HasChildren

ImageIndex

clip_image005[31] Index

clip_image005[32] IsVisible

Item

clip_image005[33] ItemId

clip_image005[34] Level

OverlayIndex

clip_image005[35] Owner

clip_image005[36] Parent

Selected

SelectedIndex

StateIndex

Text

clip_image005[37] TreeView

clip_image003[109] AbsoluteIndex property (TTreeNode)

Указывает индекс узла дерева относительно первого узла.

Синтаксис:

property AbsoluteIndex: Integer;

Описание

Используйте AbsoluteIndex, чтобы определить абсолютную позицию узла в дереве. Первый узел дерева имеет индекс 0, и последующие узлы пронумерованы последовательно. Если узел имеет любые дочерние записи, его AbsoluteIndex – на единицу меньше, чем индекс его первого ребенка.

clip_image003[110] Count property (TTreeNode)

Указывает количество прямых потомков узла. Счетчик числа дочерних узлов данного узла.

Синтаксис:

property Count: Integer;

Описание

Count используется, чтобы определить, сколько дочерних вершин принадлежит узлу. Count включает только непосредственные дочерние узлы, и не их потомков. Count может быть полезен при выполнении итераций с дочерними узлами.

clip_image003[111] Cut property (TTreeNode)

Указывает, вырезан ли узел, как часть операции «вырезать и вставить».

Синтаксис:

property Cut: Boolean;

clip_image003[112] Data property (TTreeNode)

Указывает на определенные приложением данные, связанные с узлом.

Синтаксис:

property Data: Pointer;

Описание

Используйте свойство Data, чтобы сопоставить данные с узлом. Данные позволяют приложениям быстро обратиться к информации об объекте, представленного вершиной (узлом).

clip_image003[113] Deleting property (TTreeNode)

Указывает, уничтожает ли узел метод Destroy.

Синтаксис:

property Deleting: Boolean;

Описание

Свойство Deleting возвращает true, если узел находится в процессе удаления.

clip_image003[114] DropTarget property (TTreeNode)

Показывает, перетащен ли узел?

Синтаксис:

property DropTarget: Boolean;

clip_image003[115] Expanded property (TTreeNode)

Определяет, расширен ли узел?

Синтаксис:

property Expanded: Boolean;

clip_image003[116] Focused property (TTreeNode)

Указывает, имеет ли вершина (узел) фокус?

Синтаксис:

property Focused: Boolean;

clip_image003[117] Handle property (TTreeNode)

Содержит маркер (дескриптор) Handle окна дерева, которое содержит узел TTreeNode.

Синтаксис:

property Handle: HWND;

clip_image003[118] HasChildren property (TTreeNode)

Указывает, имеет ли узел дочерние вершины?

Синтаксис:

property HasChildren: Boolean;

Описание

Свойство HasChildren равно True, если вершина имеет дочерние узлы, или False, в противном случае. Если ShowButtons дерева равен True, и HasChildren равен True, то налево от вершины появится кнопка плюс (+), когда узел свернут, и минус (-), когда узел развернут.

Замечание: если вершина не имеет никаких дочерних узлов, установка HasChildren в True покажет (+) , но дочерние вершины появляться не будут, и развернута вершина быть не может.

clip_image003[119] ImageIndex property (TTreeNode)

Определяет, какое изображение выбрано, когда вершина (узел) находится в ее нормальном состоянии и в настоящее время не выбрана.

Синтаксис:

property ImageIndex: TImageIndex;

clip_image003[120] Index property (TTreeNode)

Определяет позицию узла в списке вершин своего родителя.

Синтаксис:

property Index: Longint;

Описание

Используется свойство Index, чтобы определить позицию вершины (узла) относительно родительской вершины. Первый узел имеет значение индекса 0, и последовательные дочерние узлы индексированы последовательно.

clip_image003[121] IsFirstNode property (TTreeNode)

Указывает, является ли данная вершина самой первой?

Синтаксис:

property IsFirstNode: Boolean;

Описание

Свойство IsFirstNode возвращает true для первой вершины.

clip_image003[122] IsVisible property (TTreeNode)

Указывает, видима ли вершина (узел) в настоящее время в дереве?

Синтаксис:

property IsVisible: Boolean;

clip_image003[123] Item property (TTreeNode)

Предоставляет доступ к дочерней вершине по индексу Index.

Синтаксис:

property Item[Index: Integer]: TTreeNode;

clip_image003[124] ItemId property (TTreeNode)

Содержит маркер (дескриптор), который уникально идентифицирует каждую вершину (узел) в дереве.

Синтаксис:

property ItemId: HTreeItem;

Описание

Используйте это свойство, чтобы сослаться на вершины (узлы) при создании вызовов API Windows или запроса GetNode метода TTreeNodes.

clip_image003[125] Level property (TTreeNode)

Указывает уровень вершины в пределах дерева.

Синтаксис:

property Level: Integer;

Описание

Значение уровня 0 — для вершин на верхнем уровне. Значение уровня 1 — для их дочерних записей, и так далее.

clip_image003[126] OverlayIndex property (TTreeNode)

Определяет, которое изображение из списка изображений, используется как оверлейная маска.

Синтаксис:

property OverlayIndex: Integer;

Описание

Оверлейная маска — изображение, которое накладывается на другое изображение в дереве. Например, чтобы указать, что узел больше не доступен, используется оверлейное изображение, которое помещает X поверх изображения текущего узла.

clip_image003[127] Owner property (TTreeNode)

Указывает, какой древовидный компонент типа TTreeNodes содержит данный узел.

Синтаксис:

property Owner: TTreeNodes;

clip_image003[128] Parent property (TTreeNode)

Ссылка на объект – родительский узел верхнего уровня.

Синтаксис:

property Parent: TTreeNode;

clip_image003[129] Selected property (TTreeNode)

Определяет, выбран ли узел.

Синтаксис:

property Selected: Boolean;

clip_image003[130] SelectedIndex property (TTreeNode)

Определяет индекс изображения для выбранного узла.

Синтаксис:

property SelectedIndex: Integer;

clip_image003[131] StateIndex property (TTreeNode)

Индекс дополнительной картинки, отражающей состояние узла.

Синтаксис:

property StateIndex: Integer;

Описание

Используйте StateIndex, чтобы отобразить дополнительное изображение для узла, которое отражает информацию о состоянии.

clip_image003[132] Text property (TTreeNode)

Определяет метку, которая идентифицирует узел дерева.

Синтаксис:

property Text: string;

clip_image003[133] TreeView property (TTreeNode)

Определяет дерево, которому принадлежит узел.

Синтаксис:

property TreeView: TCustomTreeView;

clip_image003[134] Методы TTreeNode

В классе TTreeNode

clip_image007[4] ~TTreeNode

AlphaSort

Assign

Collapse

clip_image009[6] Create

CustomSort

Delete

DeleteChildren

clip_image009[7] Destroy

DisplayRect

EndEdit

Expand

getFirstChild

GetHandle

GetLastChild

GetNext

GetNextChild

getNextSibling

GetNextVisible

GetPrev

GetPrevChild

getPrevSibling

GetPrevVisible

HasAsParent

IndexOf

IsFirstNode

MakeVisible

MoveTo

Наследуют от TPersistent

GetNamePath

Наследуют от TObject

AfterConstruction

BeforeDestruction

ClassInfo

ClassName

ClassNameIs

ClassParent

ClassType

CleanupInstance

DefaultHandler

Dispatch

FieldAddress

Free

FreeInstance

GetInterface

GetInterfaceEntry

GetInterfaceTable

InheritsFrom

InitInstance

InstanceSize

MethodAddress

MethodName

NewInstance

SafeCallException

clip_image003[135] AlphaSort method (TTreeNode)

Сортирует узлы дерева.

Синтаксис:

function AlphaSort(ARecurse: Boolean = False): Boolean;

Описание

Метод AlphaSort вызывает сортировку вершин или пересортировку дочерних вершин. Если обработчик события OnCompare определен для TCustomTreeView, то программа определяет порядок сортировки. Если OnCompare не определен, вершины сортируются с учетом регистра по их заголовкам.

Дополнительный параметр ARecurse (значение по умолчанию False) определяет, что сортировка должна выполняться рекурсивно и сортировать каждое поддерево в свою очередь. Чтобы сортировать вершины верхнего уровня, используйте метод AlphaSort класса TTreeNodes.

clip_image003[136] Assign method (TTreeNode)

Копирует свойства другого узла дерева.

Синтаксис:

procedure Assign(Source: TPersistent; override;

clip_image003[137] Collapse method (TTreeNode)

Свертывает вершины дерева.

Синтаксис:

procedure Collapse(Recurse: Boolean);

Описание

Когда вершина свернута, все ее подвершины скрыты. Положительная кнопка (+) может быть отображена, в зависимости от того, установлено ли свойство дерева ShowButtons. Если параметр Recurse равен true, то все подвершины будут также свернуты.

clip_image003[138] Create constructor (TTreeNode)

Создает экземпляр класса TTreeNode.

Синтаксис:

constructor Create(AOwner: TTreeNodes);

clip_image003[139] CustomSort method (TTreeNode)

Выполняет сортировку узлов.

Синтаксис:

type

PFNTVCOMPARE = function(lParam1, lParam2, lParamSort: Longint): Integer stdcall;

TTVCompare = PFNTVCOMPARE;

function CustomSort(SortProc: TTVCompare; Data: Longint; ARecurse: Boolean = False): Boolean;

clip_image003[140] Delete method (TTreeNode)

Уничтожает вершину и все её дочерние.

Синтаксис:

procedure Delete;

clip_image003[141] DeleteChildren method (TTreeNode)

Удаляет все дочерние узлы.

Синтаксис:

procedure DeleteChildren;

Описание

Метод DeleteChildren удаляет все дочерние узлы и освобождает память.

clip_image003[142] Destroy destructor (TTreeNode)

Разрушает вершины.

Синтаксис:

destructor Destroy; override;

clip_image003[143] DisplayRect method (TTreeNode)

Возвращает ограничивающий прямоугольник для узла.

Синтаксис:

function DisplayRect(TextOnly: Boolean): TRect;

Описание

Если параметр TextOnly равен True, ограничительный прямоугольник включает только текст вершины, в противном случае включает полную строку, которую занимает вершина.

Пример:

OnCustomDrawItem, DisplayRect, Level, Indent

Следующий пример показывает, как обработчик события OnCustomDrawItem рисует элементы и строки дерева после того, как обработчик события OnCustomDraw выполнился на заднем плане.

procedure TCustomDrawForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
     NodeRect: TRect;
begin
     with TV.Canvas do
begin
     // Если DefaultDraw, равно true, любое из свойств шрифта узла, может быть
     // изменено. Обратите внимание также, что, когда DefaultDraw = True, Windows рисует
     // кнопки и игнорируют наши цвета фона шрифта, используя вместо этого
     // свойство Color TreeView’s.
     if cdsSelected in State then
     begin
          Font.Assign(SelectedFontDialog.Font);
          Brush.Color := SelBkgColorDialog.Color;
     end;
     DefaultDraw := FDefaultDrawItem;
     //DefaultDraw = False означает, что Вы должны обработать весь узел, включая кнопки,
     //строки, изображения и текст.
     if not DefaultDraw then
     begin
         //draw the selection rect.
         if cdsSelected in State then
         begin
             NodeRect := Node.DisplayRect(True);
             FillRect(NodeRect);
         end;
         NodeRect := Node.DisplayRect(False);
         if None1.Checked then
         //no bitmap, so paint in the background color.
         begin
              Brush.Color := BkgColorDialog.Color;
              Brush.Style := FBrushStyle;
              FillRect(NodeRect)
         end
         else
         //don’t paint over the background bitmap.
         Brush.Style := bsClear;
         NodeRect.Left := NodeRect.Left + (Node.Level * TV.Indent);
         //NodeRect.Left now represents the left-most portion of the expand button
         DrawButton(NodeRect, Node);
         NodeRect.Left := NodeRect.Left + TV.Indent + FButtonSize;
         //NodeRect.Left is now the leftmost portion of the image.
         DrawImage(NodeRect, Node.ImageIndex);
         NodeRect.Left := NodeRect.Left + ImageList.Width;
         //Now we are finally in a position to draw the text.
         TextOut(NodeRect.Left, NodeRect.Top, Node.Text);
    end;
end;
end;

clip_image003[144] EndEdit method (TTreeNode)

Метод окончания редактирования метки узла.

Синтаксис:

procedure EndEdit(Cancel:Boolean);

Описание

Вызовите метод EndEdit, чтобы окончить редактирование узла. Если параметр Cancel равен True, все изменения, сделанные пользователем, отменяются.

clip_image003[145] Expand method (TTreeNode)

Раскрывает дочерние вершины данного узла.

Синтаксис:

procedure Expand(Recurse: Boolean);

Описание

Когда вершина развернута, отображаются дочерние узлы. Кнопка минус ‘-‘ может быть отображена, в зависимости от того, установлено ли свойство дерева ShowButtons. Если Recurse равно True, все потомки подузлов также развернуты.

clip_image003[146] GetFirstChild method (TTreeNode)

Возвращает первую дочернюю вершину данного узла.

Синтаксис:

function GetFirstChild: TTreeNode;

clip_image003[147] GetHandle method (TTreeNode)

Возвращает маркер (дескриптор).

Синтаксис:

function GetHandle: HWND;

clip_image003[148] GetLastChild method (TTreeNode)

Возвращает последнюю дочернюю вершину данного узла.

Синтаксис:

function GetLastChild: TTreeNode;

clip_image003[149] GetNext method (TTreeNode)

Возвращает следующую вершину после данной.

Синтаксис:

function GetNext: TTreeNode;

Пример:

GetFirstNode, GetNext example

Следующий пример добавляет значение Text для всех узлов дерева в список ListBox.

var
    CurItem: TTreeNode;
begin
     CurItem := TreeView1.Items.GetFirstNode;
     while CurItem <> nil do
     begin
          ListBox1.Items.Add(CurItem.Text);
          CurItem := CurItem.GetNext;
     end;
end;

clip_image003[150] GetNextChild method (TTreeNode)

Возвращает следующую дочернюю вершину, следующую после вершины, указанной параметром Value.

Синтаксис:

function GetNextChild(Value: TTreeNode): TTreeNode;

Пример:

Parent, GetNextChild, GetPrevChild example

Следующий код проверяет, видит ли выбранный узел брата; если так, HasSibling будет установлен в true.

var
    HasSibling: Boolean;
    SelNode: TTreeNode;
    ParentNode: TTreeNode;
begin
    SelNode := TTreeView1.Selected;
    ParentNode := SelNode.Parent;
    HasSibling := (ParentNode.GetPrevChild(SelNode) <> nil) or
    (ParentNode.GetNextChild(SelNode) <> nil);
end;

clip_image003[151] gGetNextSibling method (TTreeNode)

Возвращает следующий узел в дереве на том же самом уровне, что и данный узел.

Синтаксис:

function GetNextSibling: TTreeNode;

Описание

Функция GetNextSibling возвращает следующий узел, независимо от того, видим ли мы его. Чтобы находить следующий узел в дереве, включая дочерние вершины, используйте функцию GetNext.

clip_image003[152] GetNextVisible method (TTreeNode)

Возвращает следующий видимый узел дерева после данного.

Синтаксис:

function GetNextVisible: TTreeNode;

clip_image003[153] GetPrev method (TTreeNode)

Возвращает узел в дереве, предшествующий данному узлу (выделенному, например).

Синтаксис:

function GetPrev: TTreeNode;

clip_image003[154] GetPrevChild method (TTreeNode)

Возвращает дочерний узел, предшествующий узлу Value.

Синтаксис:

function GetPrevChild(Value: TTreeNode): TTreeNode;

clip_image003[155] GetPrevSibling method (TTreeNode)

Возвращает предыдущий узел перед текущим узлом и на том же самом уровне.

Синтаксис:

function GetPrevSibling: TTreeNode;

clip_image003[156] GetPrevVisible method (TTreeNode)

Возвращает предыдущий узел перед текущим узлом.

Синтаксис:

function GetPrevVisible: TTreeNode;

clip_image003[157] HasAsParent method (TTreeNode)

Возвращает True, если узел Value является родителем текущей вершины.

Синтаксис:

function HasAsParent(Value: TTreeNode): Boolean;

clip_image003[158] IndexOf method (TTreeNode)

Возвращает позицию дочерней вершины текущего узла.

Синтаксис:

function IndexOf(Value: TTreeNode): Integer;

Описание

Вызовите метод IndexOf, чтобы получить положение дочерней вершины среди других дочерних вершин. Если вершина Value — не является дочерней вершиной метод IndexOf возвращает-1. Первая дочерняя вершина имеет индекс 0, вторая индекс 1, и так далее.

clip_image003[159] MakeVisible method (TTreeNode)

Делает узел видимым.

Синтаксис:

procedure MakeVisible;

clip_image003[160] MoveTo method (TTreeNode)

Перемещает узел в другое место дерева.

Синтаксис:

procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode);

Описание

Параметр Destination определяет узел, который будет родителем текущего узла или братом после перемещения. Параметр Mode определяет новые отношения между этим узлом и узлом адресата.

Значение Комментарий

naAdd Новый или перемещенный узел становится последним братом другого узла.

naAddFirst Новый или перемещенный узел становится первым братом другого узла.

naInsert Новый или перемещенный узел становится братом перед другим узлом.

naAddChild Новый или перемещенный узел становится последним ребенком другого узла.

naAddChildFirst Новый или перемещенный узел становится первым ребенком другого узла.

Пример:

GetNodeAt, MoveTo, Selected

Следующий код использует GetNodeAt, чтобы добавить перемещенный узел как ребенок узла.

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
    AnItem: TTreeNode;
    AttachMode: TNodeAttachMode;
    HT: THitTests;
begin
    if TreeView1.Selected = nil then Exit;
    HT := TreeView1.GetHitTestInfoAt(X, Y);
    AnItem := TreeView1.GetNodeAt(X, Y);
    if (HT — [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
    begin
       if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild
       else if htNowhere in HT then AttachMode := naAdd
       else if htOnIndent in HT then AttachMode := naInsert;
       TreeView1.Selected.MoveTo(AnItem, AttachMode);
    end;
end;

Александр Малыгин

Объект обсуждения - программное обеспечение для выполнения автоматизированного конструкторского и технологического проектирования, разработки управляющих программ, вопросы, связанные с разработкой прикладных САПР.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *