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

Вниз

подскажите, как показать все дирректории диска в виде дерева?   Найти похожие ветки 

 
stilet   (2002-11-04 08:56) [0]

Знатоки, подскажите, как показать все дирректории диска в виде дерева? Т.е. есть задача получить список дирректорий, входящей в заданную, потом далее из этих получить список, и т.д. до тек пор, пока не получим имена всех дирректорий. Результат можно просто добавлять в мемо.


 
Song ©   (2002-11-04 09:03) [1]

Соседняя ветка!


 
Anatoly Podgoretsky ©   (2002-11-04 09:13) [2]

Если в мемо то тебе придется использовать пробелы в начале каждой строки, для выделения уровней.
А так это извечный вопрос данного форуму, не снимаемое заклятие. Ответ есть в ЧаВо


 
Dr. Web ©   (2002-11-04 10:29) [3]

Идешь на http://www.delphiplus.org - смортишь статью "FastReport: менеджер отчетов - 2" - там все написано (там это дерево присобачено прямо в меню ;)) - от туда мона вырезать куски и сделать то же самое, но с ТриВьювом

P.S. Я так же буду очень благодарен, если вы проголосуете за эту статью. ;)


 
Separator ©   (2002-11-04 10:57) [4]

В мемо даже проще, чем в TreeView


 
Separator ©   (2002-11-04 11:27) [5]


procedure TForm1.FindDirs(Drive: string; List: TStrings);

function Space(Count: word): string;
var
i: integer;
begin
Result:= "";
if Count > 0 then
for i:= 0 to Count do
Result:= Result + #32
end;

procedure Find(const Path: string; const Level: word);
var
SearchRec: TSearchRec;
begin
if FindFirst(Path + "*.*", faAnyFile, SearchRec) = 0 then
repeat
with SearchRec do
if (Name <> ".") and (Name <> "..") and ((Attr and faDirectory) = faDirectory) then
begin
List.Add(Space(Level) + Name);
Find(Path + Name + "\", Level + 1)
end
until FindNext(SearchRec) <> 0;
FindClose(SearchRec)
end;
begin
List.Clear;
SetLength(Drive, 3);
if Drive[2] <> ":" then
Drive[2]:= ":";
if Drive[3] <> "\" then
Drive[3]:= "\";
List.Add(Drive);
Find(Drive, 1)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FindDirs(Edit1.Text, ListBox1.Items);
end;


 
Separator ©   (2002-11-04 11:49) [6]

procedure TForm1.FindDirs(Drive: string; TreeNodes: TTreeNodes);
procedure Find(const Path: string; Tree: TTreeNode);
var
SearchRec: TSearchRec;
begin
if FindFirst(Path + "*.*", faAnyFile, SearchRec) = 0 then
repeat
with SearchRec do
if (Name <> ".") and (Name <> "..") and ((Attr and faDirectory) = faDirectory) then
Find(Path + Name + "\", Tree.Owner.AddChild(Tree, Name))
until FindNext(SearchRec) <> 0;
FindClose(SearchRec)
end;
begin
TreeNodes.Clear;
SetLength(Drive, 3);
Drive:= Drive[1] + ":\";
Find(Drive, TreeNodes.Add(nil, copy(Drive, 1, 2)))
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FindDirs(Edit1.Text, TreeView1.Items);
end;


 
Alex4444444444   (2002-11-04 11:57) [7]

Ето будет работать слишком медленно. Лучше отсканировать корень и всем добавленным TTreeNode дать HasChildren := True (нарисовать плюсик). Потом в OnExpanding сканировать соответствующий каталог и добавлять Nodes. (Можно также вынести сканирование детей в отдельный Thread.)


 
Separator ©   (2002-11-04 12:05) [8]

Согласен, просто это будо быстрее написать :)



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
3-45732
123000
2002-10-23 17:41
2002.11.14
Сортировка


1-45799
lensky
2002-11-03 19:45
2002.11.14
Listview Select All...


14-46138
Anatoly Podgoretsky
2002-10-28 08:49
2002.11.14
Именинники 28 октября


1-45899
KME
2002-11-05 22:43
2002.11.14
Дипломная работа


3-45685
b-Ars
2002-10-15 15:44
2002.11.14
2 приложения конфликтуют на одинаковых базах