Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.07;
Скачать: CL | DM;

Вниз

Получить TTreeNode   Найти похожие ветки 

 
Дмитрий К.К.   (2002-10-26 10:07) [0]

Подскажите, плиз, как получить TTreeNode по его StateIndex?


 
Дмитрий К.К.   (2002-10-26 10:32) [1]

Делаю так:
function GetMyNode(StateNDX: Integer): TTreeNode;
var
i: Integer;
begin
Result := nil;
for i := 0 to TreeView.Items.Count - 1 do
if TreeView.Items[i].StateIndex = StateNDX then
Result := TreeView.Items[i];
end;

но уверен, что ето не оптимально


 
troits ©   (2002-10-26 12:27) [2]

Конечно не оптимально. Оптимальнее было бы при назначении узлу StateIndex-a запоминать ссылку на него в каком-нибудь списке пар (StateIndex, List_Of_TreeNodes) , если уж это так надо, хотя это очень странный способ привязки к узлу.

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


 
Дмитрий К.К.   (2002-10-28 06:44) [3]


> troits © (26.10.02 12:27)
> Оптимальнее было бы при назначении
> узлу StateIndex-a запоминать ссылку на него в каком-нибудь
> списке пар (StateIndex, List_Of_TreeNodes)


Можно чуточку подробнее?


 
troits ©   (2002-10-28 12:19) [4]

Ну, StateIndex - просто индекс картинки в списке TreeView.StateImages для отображения. Во-первых, много узлов может иметь один и тот же индекс. Когда он назначается, например при создании узла, или когда - либо ещё, ты имеешь сам указатель на узел. Ну и запоминай его где-нибудь, например в списке TList, чтобы не проходить потом все дерево.


 
turusov ©   (2002-10-28 13:22) [5]

В uses ComCtrls в implementation есть TTreeStrings. Там в SaveTreeToStream есть реализация перебора дерева, может это что надо.


 
Дмитрий К.К.   (2002-10-28 13:36) [6]

Спасибо!
Но мне на форуме Борланда уже ответили конкретно, с примером и без хождения вокруг да около :)


 
MBo ©   (2002-10-28 13:56) [7]

>Но мне на форуме Борланда уже ответили конкретно, с примером и без хождения вокруг да около
С твоей стороны такое заявление непорядочно.

Стоило привести здесь know-how, касающееся просто метода ускоренного обхода дерева


It"s much more efficient to walk a tree using the internal node pointers than to loop
through the Items.

function GetMyNode( StateNDX: Integer ): TTreeNode;
var
Node: TTreeNode;
begin
Node := TreeView.GetFirstNode;

while Assigned( Node ) and ( Node.StateIndex <> StateNDX ) do
Node := Node.GetNext;

Result := Node;
end;

John Leavey



Страницы: 1 вся ветка

Текущий архив: 2002.11.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
1-21486
^Sanya
2002-10-27 21:08
2002.11.07
MDI: создание потомков детей...


1-21485
Леший
2002-10-25 20:18
2002.11.07
Как к текущей дате добавить месяц?


1-21481
Leny
2002-10-28 14:57
2002.11.07
Close=Minimaze


1-21593
delpher_gray
2002-10-29 19:07
2002.11.07
Как из нескольких чисел найти самое большое ;-)


1-21568
Di_wind
2002-10-25 23:00
2002.11.07
WebBrowser