Главная страница
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.021 c
2-1210623772
rena
2008-05-13 00:22
2008.06.08
Расстановки ладей на шахматной доске


2-1211005626
New1
2008-05-17 10:27
2008.06.08
ActionMainMenuBar


8-1181815939
MovieMan
2007-06-14 14:12
2008.06.08
Модули для lame_enc.dll


15-1208933925
REA
2008-04-23 10:58
2008.06.08
Договор с работодателем


3-1199497352
DimonS
2008-01-05 04:42
2008.06.08
Хитрый отчет в FastReport