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

Вниз

Дети у TTreeView   Найти похожие ветки 

 
anod ©   (2002-07-29 19:08) [0]

Пытаюсь перебрать детей:
for i:= 0 to TreeView1.Items.Count-1 do begin
if TreeView1.Items[i].Level=0 then begin
for j:= 0 to TreeView1.Items[i].Count-1 do begin
if TreeView1.Items[i].Item[j].Level=0 then s:=s+"<DT>"+TreeView1.Items[i].Item[j].Text+"</DT>";
if TreeView1.Items[i].Item[j].Level>0 then s:=s+"<DD>"+TreeView1.Items[i].Item[j].Text+"</DD>";
end;
end;


или

for i:= 0 to TreeView1.Items.Count-1 do begin
if TreeView1.Items[i].Level=1 then
s:=s+"<DT>"+TreeView1.Items[i].Text+"</DT>";
if TreeView1.Items[i].Level>1 then s:=s+"<DD>"+TreeView1.Items[i].Item[j].Text+"</DD>";
end;


Ничего не выходит? Почему?


 
Skier ©   (2002-07-29 19:28) [1]

>anod

> Пытаюсь перебрать детей


Детей какого-то определённого узла ?


 
anod ©   (2002-07-29 19:38) [2]

Нет, япервый пример работает, но не совсем,
я прохожесь по всем уззлам нахожу корневой узел, потом, просматриваю его чилдрын c Level=1, но я не могу просмотреть потомков с левел>1, мне что нужно ещё один цикл, потом ещё и т.д.


 
anod ©   (2002-07-29 21:21) [3]

Т.е.
for i:= 0 to TreeView1.Items.Count-1 do begin
if TreeView1.Items[i].Level=0 then begin s:=s+"<h3>"+TreeView1.Items[i].Text+"</h3>";
for j:= 0 to TreeView1.Items[i].Count-1 do begin
s:=s+"<DT>"+TreeView1.Items[i].Item[j].Text+"</DT>";
for k:= 0 to TreeView1.Items[i].Item[j].Count-1 do begin
s:=s+"<DD>"+TreeView1.Items[i].Item[j].Item[k].Text+"</DD>";
{... и дальше for"ы до буквы z}
end;
end;
end;
end;


Как от этого избавитсья?


 
quark ©   (2002-07-29 22:08) [4]

А что ты за программу пишешь?

Вообще перебираются так пишеться процедура захода в узел и перебора текущих элементов (рекурсивная)
зашел в узел взял элемент и попытался зайти в него как в узел, если получилось повтори процедуру, иначе на уровень выше.
Я так открытые в системе окна и процессы в WindowsControllere перебираю.


 
TTCustomDelphiMaster ©   (2002-07-29 22:46) [5]

anod © (29.07.02 21:21)

Делается это с помощью рекурсии

function TreeNodeToHTMLString(Node: TTreeNode): string;
var
tag: string;
i: integer;
function GetTag(Node: TTreeNode): string;
begin
case Node.Level of
0 : Result := "h3";
1 : Result := "DT";
else Result := "DD";
end;
end;
begin
Result := "<"+GetTag(Node)+">" + Node.Text + "</"+GetTag(Node)+">";
for i:= 0 to Node.Count-1 do
Result := Result+TreeNodeToHTMLString(Node.Item[i]); // Рекурсия
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
s: string;
begin
s := "";
for i:=0 to TreeView1.Items.Count-1 do
if TreeView1.Items[i].Level = 0 then
s := s +TreeNodeToHTMLString(TreeView1.Items[i]);
Memo1.Text := s;
end;


 
anod ©   (2002-07-29 23:17) [6]

Большое спасибо, я знаю что надо использоать рекурсию и её принципы, но никогда ей не пользовался.



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
1-35289
Demona
2002-07-31 17:37
2002.08.12
возможно глупый вопрос...


4-35507
Валет
2002-06-06 16:07
2002.08.12
как определить координаты курсора ?


3-35136
Piton X
2002-07-19 16:45
2002.08.12
При подключении к базе Interbase 6 выскакивает окно подключения к


1-35371
Dinara
2002-07-30 17:42
2002.08.12
По какому принципу Delphi самостоятельно подключает модули?


14-35455
AL2002
2002-07-17 11:33
2002.08.12
А кто какие проекты делал на Дельфи?