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

Вниз

TreeView   Найти похожие ветки 

 
Эльф   (2008-05-13 19:03) [0]

Здравствуйте. У меня такая проблема нужно иерархию выбранного каталога добавить в 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;

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


 
Palladin ©   (2008-05-13 19:05) [1]

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


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

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


 
Palladin ©   (2008-05-13 19:09) [3]

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


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


> Эльф


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


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


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

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

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


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

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

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;



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
15-1208948348
Maks0
2008-04-23 14:59
2008.06.08
Стойкость пароля в битах


3-1199532014
DeadMeat
2008-01-05 14:20
2008.06.08
Постоянные обрывы связи.


2-1210669623
honor
2008-05-13 13:07
2008.06.08
Выбор в поле из выпадающего списка


2-1208440152
grav
2008-04-17 17:49
2008.06.08
Ввод данных в две таблицы из одной формы


2-1210764128
Михаил
2008-05-14 15:22
2008.06.08
Interbase Express