Текущий архив: 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