IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> treeview, содержимое папки
Client
сообщение 10.04.2010 18:39
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Привет smile.gif
Надо сделать дерево для директории.
основываясь на коде для поиска файлов с выводом в memo, вот что получилось
procedure FindFiles(const Path, Mask: String; node: TTreeNode);
var
SRec: TSearchRec;
Dir: string;
begin
Dir := IncludeTrailingPathDelimiter(Path);
if FindFirst(Dir + '*.*', faAnyFile, SRec) <> 0 then Exit;
try
repeat
if (SRec.Name = '.') or (SRec.Name = '..') then Continue;
if (SRec.Attr and faDirectory) = faDirectory then begin // Вот проверка, папка или нет
node := Form3.TreeView1.Items.AddChild(node, SRec.Name);

FindFiles(Dir + SRec.Name, Mask, node)
end
else
begin
if MatchesMask(Dir + SRec.Name, Mask) then
begin
Form3.TreeView1.Items.AddChild(node, SRec.Name);
end;
end;
until FindNext(SRec) <> 0;
finally
FindClose(SRec);
end;
end;
но не правильно.

Добавлено через 10 мин.
procedure FindFiles(const Path, Mask: String; node: TTreeNode);
var
SRec: TSearchRec;
Dir: string;
mynode : TTreeNode;
begin
Dir := IncludeTrailingPathDelimiter(Path);
if FindFirst(Dir + '*.*', faAnyFile, SRec) <> 0 then Exit;
try
repeat
if (SRec.Name = '.') or (SRec.Name = '..') then Continue;
if (SRec.Attr and faDirectory) = faDirectory then begin // Вот проверка, папка или нет
mynode := Form3.TreeView1.Items.AddChildObject(node, SRec.Name, nil);

FindFiles(Dir + SRec.Name, Mask, mynode)
end
else
begin
if MatchesMask(Dir + SRec.Name, Mask) then
begin
Form3.TreeView1.Items.AddChildObject(node, SRec.Name,nil);

end;
end;
until FindNext(SRec) <> 0;
finally
FindClose(SRec);
end;
end;
Добавил локальную переменную - все заработало.
Чудеса, а не рекурсия smile.gif
А можно сделать, чтобы файлы были упорядочены по алфавиту (это есть) и по типу - т.е. сначала были папки, а потом файлы ?

Сообщение отредактировано: Client - 10.04.2010 18:53


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.04.2010 19:25
Сообщение #2


Гость






Разбей на 2 части: поиск папок и поиск файлов...
procedure FindFiles(const Path, Mask: String; node: TTreeNode);
var
SRec: TSearchRec;
Dir: string;
mynode : TTreeNode;
begin
Dir := IncludeTrailingPathDelimiter(Path);
if FindFirst(Dir + '*.*', faDirectory, SRec) <> 0 then Exit;
try
repeat
if (SRec.Name = '.') or (SRec.Name = '..') then Continue;
if (SRec.Attr and faDirectory) = faDirectory then begin // проверка, папка или нет
mynode := Form1.TreeView1.Items.AddChildObject(node, SRec.Name, nil);

FindFiles(Dir + SRec.Name, Mask, mynode);
end
until FindNext(srec) <> 0;

if FindFirst(Dir + '*.*', faAnyFile, SRec) = 0 then
try
repeat
if (SRec.Attr and faDirectory) <> faDirectory then
if MatchesMask(Dir + SRec.Name, Mask) then
begin
Form1.TreeView1.Items.AddChildObject(node, SRec.Name,nil);
end;
until FindNext(SRec) <> 0;
finally
FindClose(SRec);
end;

finally
FindClose(SRec);
end;
end;
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Client   treeview   10.04.2010 18:39
volvo   Разбей на 2 части: поиск папок и поиск файлов... p...   10.04.2010 19:25
Client   даже и не догадался бы :) Спасибо :good:   10.04.2010 19:31
volvo   Если не очень хочется делать двойную работу (прохо...   10.04.2010 20:07
Client   если честно - то не понял смысл всего этого. Рекур...   10.04.2010 20:20
volvo   Это ты сейчас о чем? Я вообще не пишу папки в Stri...   10.04.2010 20:27
Client   да, точно :) даже не знаю - если в самой папке с...   10.04.2010 20:39
volvo   Что значит "привязать"? Допустим, привяз...   10.04.2010 21:21
Client   значение - это ID поле в таблице. По нему буду обр...   10.04.2010 21:24
volvo   var Counter: Integer = 0; procedure FindFiles(c...   10.04.2010 21:50
Client   Как раз то, что доктор прописал :) Все работает, ч...   10.04.2010 22:05
Client   а форум хитрый... :) видать ограничение на 24 час...   10.04.2010 23:21
Client   Понадобилось вывести все элементы для выбранного у...   11.04.2010 14:56
volvo   Зачем лишние действия? procedure TForm3.Button3Cl...   11.04.2010 15:08
Client   Спасибо :) но думаю вопросы будут еще...   11.04.2010 16:32
Client   Только заметил Update :) А почему нету "Сообщ...   11.04.2010 20:21
volvo   Нет... Потому, что я редактировал через "Быст...   11.04.2010 21:00
Client   И снова Здравствуйте :) В DRKB нашел код для уда...   12.04.2010 15:10
volvo   Как вызываешь эту MyRemoveDir, покажи? Какой путь ...   12.04.2010 15:26
Client   Этой функцией получаю путь function SrNodeTree(pTr...   12.04.2010 17:45
volvo   Стоп. Ну, удалил ты с диска папку вместе со всем е...   12.04.2010 17:57
Client   Ок, стоп :) Дело как раз в том, что с диска не уда...   12.04.2010 18:03
volvo   Ты будешь смеяться, но... До удаления: После уда...   12.04.2010 18:24
Client   чудеса значит. если просто удалить пустую - то все...   12.04.2010 18:47
volvo   Кстати, на форуме forums.embarcadero.com великий и...   12.04.2010 19:11
Client   Проверенным методом трассировки выяснилось, что уд...   12.04.2010 19:45
volvo   Хм... "Меня терзают смутные сомнения" (С...   12.04.2010 20:29
Client   Да, папку нельзя удалить. Выдает ошибку 18 и 145. ...   12.04.2010 20:38
volvo   Это я что, просто так спросил? Перед попыткой вызо...   12.04.2010 21:59
Client   Скорей всего это не из-за висты. Вся работа с папк...   12.04.2010 22:10
volvo   GetCurrentDirectory никто не отменял. SetCurrent...   12.04.2010 22:42
Client   Все исправил, ошибка была при поиске файлов, видим...   12.04.2010 23:17
Client   понадобилось вывести все элементы выбранной ветки....   26.04.2010 20:37
volvo   Не совсем... Что именно требуется, расскажи?   26.04.2010 21:27
Client   УРААА :) сделал так, почти твой код ) procedure fi...   26.04.2010 21:33
volvo   Зачем лишние действия делать? procedure FillMemo(...   27.04.2010 1:53


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 12.07.2025 21:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"