Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Вниз

Дети ноды в дереве   Найти похожие ветки 

 
Nucl   (2003-08-11 15:29) [0]

Как вытащить всех детей и детей детей от текущей ноды,
GetNextChild почему-то возвращает тех, кто на том же уровне, а нужно тех, кто внутри.


 
Skier   (2003-08-11 15:31) [1]

Рекурсия выручит.


 
Nucl   (2003-08-11 15:35) [2]

а правильно чайлда получить как ?


 
Семен Сорокин   (2003-08-11 15:42) [3]

без рекурсии
var
_node: TTreeNode;
_lastnode: TTreeNode;

begin
_node := TreeView1.Selected;
_lastnode := _node.GetNextSibiling;
while _node.GetNextNode <> _lastnode do begin
// все твои ноды

_node := _node.GetNextNode
end
end;


 
Nucl   (2003-08-11 15:53) [4]

Спасибо ! действительно работает, только
Немножко подправленное:
var
_node: TTreeNode;
_lastnode: TTreeNode;

begin
_node := TreeView1.Selected;
_lastnode := _node.GetNextSibiling;
while _node <> _lastnode do begin
// все твои ноды

_node := _node.GetNextNode
end
end;


 
Семен Сорокин   (2003-08-11 15:59) [5]

Nucl © (11.08.03 15:53) [4]
на глаз писал :))


 
Nucl   (2003-08-11 16:05) [6]

однако не все так хорошо:
если в ветке нет другой ноды на том же уровне, GetNextSibiling захватит ноду из другой ветки но на том же уровне соответственно при прогонке высосутся все ноды из другой ветки до уровня текущей ноды :((((


 
Семен Сорокин   (2003-08-11 16:14) [7]

Nucl © (11.08.03 16:05) [6]
Parent"ы проверяй, чё-нить типа этого
var
_node: TTreeNode;
_lastnode: TTreeNode;

begin
_node := TreeView1.Selected;
_lastnode := _node.GetNextSibiling;
if _lastnode.parent <> _node.parent then
_lastnode := _node.parent;
while _node <> _lastnode do begin
// все твои ноды

_node := _node.GetNextNode
end
end;


 
Семен Сорокин   (2003-08-11 16:17) [8]

блин, сорри, все равно неверно


 
Nucl   (2003-08-11 16:18) [9]

Во, как оно лечится и работает:
var
_node: TTreeNode;
_lastnode: TTreeNode;
TempNode2: TTreeNode;
begin
_node := TreeView1.Selected;
_lastnode := _node.GetNextSibiling;
while _node <> _lastnode do begin
// все твои ноды

//во временную ноду
TempNode2 := _node.GetNext;
// если ниже нет нод то будет nil
if TempNode2 = nil then break;
// проверка на перескок на другую ветку
if TempNode2.Parent <> _node then
break
else
_node := _node.GetNextNode;
end
end;


 
Семен Сорокин   (2003-08-11 16:26) [10]

а я наваял через рекурсию:
:))

procedure AllNodesInNode(ANode: TTreeNode);
var
_i : integer;
_node: TTreeNode;
begin
ActionsWithNode(ANode); // твои действия
for _i := 0 to ANode.Count - 1 do begin
_node := ANode.GetNextChild(ANode);
if Assigned(_node) then
AllNodesInNode(_node);
end
end;


 
Nucl   (2003-08-12 09:53) [11]

нда, оба метода работают неверно
в моем не едет на параллельные ветки внутри ноду, а идет только до конца первой, в твоем не заходит вовнуть веток


 
Nucl   (2003-08-12 10:27) [12]

все, нашел решение!
нужно было использовать уровень ноды.

var
_node: TTreeNode;
_lastnode: TTreeNode;
TempNode2: TTreeNode;
RootLevel : integer;
begin
_node := TreeView1.Selected;
RootLevel := _node.Level;_lastnode := _node.GetNextSibiling;
while _node <> _lastnode do begin
// все твои ноды

//во временную ноду
TempNode2 := _node.GetNext;
// если ниже нет нод то будет nil
if TempNode2 = nil then break;
// проверка на перескок на другую ветку
if TempNode2.Level <= RootLevel then
break
else
_node := _node.GetNextNode;
end
end;


 
NAlexey   (2003-08-12 10:34) [13]

Можно так:

procedure TForm1.Button1Click(Sender: TObject);

procedure ProcessChild(Ch: TTreeNode);
var
I: Integer;
begin
with Ch do
for I := 0 to Count - 1 do
begin
{
Действия:
ShowMessage(Items[I].Text);
}
ShowMessage(Item[I].Text);
if Item[I].HasChildren then
ProcessChild(Item[I]);
end;
end;

var
LNode: TTreeNode;
begin
LNode := TreeView1.TopItem;
while LNode <> nil do
begin
{
Действия:
ShowMessage(LNode.Text);
}
if LNode.HasChildren then
ProcessChild(LNode);
LNode := LNode.getNextSibling;
end;
end;



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

Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
3-81580
Andrey2k
2003-07-30 13:10
2003.08.25
D4+Zeos+MSSQL


3-81540
McSimm2
2003-07-31 09:55
2003.08.25
[Oracle] fields not is null


1-81813
Yakudza
2003-08-13 19:24
2003.08.25
Как написать буквы форме ?


1-81690
Winni
2003-08-11 14:15
2003.08.25
Проблемы с кириллицей при компиляции .RTF --> .HLP (HCW.exe)


14-81903
DenKop
2003-08-04 21:10
2003.08.25
Песни через системный динамик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский