Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить TTreeNode


Дмитрий К.К. ©   (2002-10-26 10:07:00) 

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


MBo   (2002-10-28 13:56:00) [1]

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

Стоило привести здесь 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


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

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


turusov   (2002-10-28 13:22:00) [3]

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


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

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


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


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


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


troits   (2002-10-26 12:27:00) [6]

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

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


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

Делаю так:
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;

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо