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

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

TreeView


Эльф ©   (2008-05-13 19:03:00) 

Здравствуйте. У меня такая проблема нужно иерархию выбранного каталога добавить в treeview. Написал код но он не полностью подходит под мою задачу.

procedure TForm1.BitBtn1Click(Sender: TObject);
var s,s2,s3:TSearchRec;    node:TTreeNode;  
begin

///////////////////////////////////////////////////////////////////////////////////////////////   1 цикл
if FindFirst(ExtractFilePath(ParamStr(0))+'files\*.*',faAnyFile,s)=0 then  //Поиск в папке files всех документов
repeat
begin

if (s.Name='.')or(s.Name='..') then Continue;  //точку и две точки отбрасываем
node:= TreeView1.Items.Add(nil,s.Name);        //добавляем найденный файл или папку в дерево
TreeView1.Select(node);                       //выделяем добавленный файл или папку
///////////////////////////////////////////////////////////////////    2 цикл
if FindFirst(ExtractFilePath(ParamStr(0))+'files\'+s.Name+'\*.*',faAnyFile,s2)=0 then  //ищем во вложенной папке
repeat
begin

if (s2.Name='.')or(s2.Name='..') then Continue;
node:= TreeView1.Items.AddChild(TreeView1.Selected,s2.Name);        //добавляем как дочерний компонент

//////////////////////////////////////////////////       3 цикл
if FindFirst(ExtractFilePath(ParamStr(0))+'files\'+s.Name+'\'+s2.Name+'\*.*',faAnyFile,s3)=0 then
repeat
begin

if (s3.Name='.')or(s3.Name='..') then Continue;
node:= TreeView1.Items.AddChild(TreeView1.Selected,s3.Name);

end;
until (FindNext(s3) <> 0);        //условие поиска во вложенной папке
FindClose(s3);            
//////////////////////////////////////////////////      3 цикл

end;
until (FindNext(s2) <> 0);        //условие поиска во вложенной папке в папку files
FindClose(s2);
//////////////////////////////////////////////////////////////////////   2 цикл

end;
until (FindNext(s) <> 0);         //условие поиска в папке files
FindClose(s);
//////////////////////////////////////////////////////////////////////////////////////////////////   1 цикл

end;

Этот код правильно отображает каталоги самого верхнего уровня


Эльф   (2008-05-13 21:09:00) [1]

Вот попробывал с рекурсией но выводит полный список файлов, а надо что-бы по иерархии может кто сможет подсказать

procedure Ffind (put:string);
var s:TSearchRec; node:TTreeNode;
begin

if FindFirst(put+'\*.*',faAnyFile,s)=0 then
repeat
begin

if (s.Name='.')or(s.Name='..') then Continue;
if (S.Attr=faDirectory)=false then
node:=Form1.TreeView1.Items.Add(nil,s.Name)
else
begin
node:=Form1.TreeView1.Items.AddChild(nil,s.Name);
Ffind(put+'\'+s.Name);
end;

end;
until (FindNext(s) <> 0);         //условие поиска в папке files
FindClose(s);

end;


Эльф   (2008-05-13 19:17:00) [2]


> так отобрази... чего мешает то? что такое рекурсия в курсе?

Рекурсией называется объект, частично состоящий или определяемый с помощью самого себя.

А как это использовать?


Сергей М,   (2008-05-13 19:11:00) [3]


> Эльф


Совесть имей, да ?
Смотреть тошно эту кучу неформатированного говна, не то что вникать в шевелящуюся в ней "программерскую мысль")


Palladin   (2008-05-13 19:09:00) [4]

так отобрази... чего мешает то? что такое рекурсия в курсе? :)


Эльф   (2008-05-13 19:08:00) [5]

Нет надо отобразить все вложенные файлы и папки.


Palladin   (2008-05-13 19:05:00) [6]

А каталоги уровней повыше неправильно? :)


Наверх

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