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

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

TreeView низший уровень [WinXP]


Ghost. ©   (2002-10-14 16:54:00) 

Как определить все последние значения веток относящихся к каждому уровню например
1111111
ццццццц
йййййй
222222
вввввввв
жжжжжжжж
к
1111111 последними будут ццццццц и йййййй,
к 222222- жжжжжжжж но и к вввввввв последним будет жжжжжжжж


Milz   (2002-10-15 11:46:00) [1]

Сорри, могут быть ошибки в синтаксисе и не только ;).


procedure NodeList(Node:TTreeNode)
var
lChild:TTreeNode;
begin

if node.Count>0 then begin
lChild:=Node.getFirstChild;
repeat
if lChild<>nil then
begin
NodeList(lChild);
end;
lChild:=Node.GetNextChild(lChild);
until lChild = nil;
end else begin
ListBox2.Items.Add(Node.Text);
end;

end;


procedure TForm1.ListCalc;
begin
NodeList(DATreeView1.Items.GetFirstNode);
end;


Ghost.   (2002-10-15 11:27:00) [2]

procedure TForm1.Button1Click(Sender: TObject);
var
Node, lChild:TTreeNode;
begin
Node:=DATreeView1.Items.GetFirstNode;
while node<>nil do
begin
//:=Node.text;
///////////////////////////////////////////////////////////////////////
lChild:=Node.getFirstChild;
repeat
if lChild<>nil then
begin
if lChild.Count=0 then ListBox2.Items.Add(lChild.Text);
end;
lChild:=Node.GetNextChild(lChild);
until lChild = nil;
////////////////////////////////////////////////////////////////////
Node:=Node.GetNextSibling;
end;
end;

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


MBo   (2002-10-15 10:28:00) [3]


procedure TForm1.Button1Click(Sender: TObject);
var
Node:TTreeNode;
MaxLevel: Integer;
MaxText:String;
procedure Walk(node:TTreenode);
var
i: Integer;
begin
for i:=0 to node.Count-1 do begin
if MaxLevel<= {или <} node.Item[i].level then begin
MaxLevel:=node.Item[i].level;
MaxText:=node.item[i].Text;
end;
walk(node.item[i]);
end;
end;
begin
Node:=TreeView1.Items.GetFirstNode;
while Node<>nil do begin
MaxLevel:=0;
MaxText:=node.Text;
walk(node);
Memo1.Lines.Add(MaxText);
Node:=Node.GetNextSibling;
end;
end;


MBo   (2002-10-15 10:06:00) [4]

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
MaxLevel: Integer;
MaxData:String;
procedure Walk(node:TTreenode);
var
i: Integer;
begin
for i:=0 to node.Count-1 do begin
//находит ПЕРВЫЙ из самых глубоких элементов.
//если надо последний, замени < на <=
if MaxLevel< node.Item[i].level then begin
MaxLevel:=node.Item[i].level;
MaxData:=node.item[i].Text;
end;

walk(node.Item[i]);
end;
end;

begin
MaxLevel:= node.Level;
MaxData:=node.Text;
walk(node);
Caption:= Inttostr(MaxLevel)+ " "+MaxData;
end;


Ghost.   (2002-10-14 17:25:00) [5]

Мысль понятна но мне нето надо..поробую из этого сделать сам


MBo   (2002-10-14 17:00:00) [6]

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
MaxLevel: Integer;
procedure Walk(node:TTreenode);
var
i: Integer;
begin
for i := 0 to node.Count - 1 do begin
if MaxLevel < node.Item[i].level then
MaxLevel:= node.Item[i].level;
walk(node.Item[i]);
end;
end;

begin
MaxLevel := node.Level;
walk(node);
Caption := Inttostr(MaxLevel);
end;


Наверх

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