![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
подскажите, как показать все дирректории диска в виде дерева? [D5]
stilet © (2002-11-04 08:56:00)Знатоки, подскажите, как показать все дирректории диска в виде дерева? Т.е. есть задача получить список дирректорий, входящей в заданную, потом далее из этих получить список, и т.д. до тек пор, пока не получим имена всех дирректорий. Результат можно просто добавлять в мемо.
Separator (2002-11-04 12:05:00) [1]Согласен, просто это будо быстрее написать :)
Alex4444444444 (2002-11-04 11:57:00) [2]Ето будет работать слишком медленно. Лучше отсканировать корень и всем добавленным TTreeNode дать HasChildren := True (нарисовать плюсик). Потом в OnExpanding сканировать соответствующий каталог и добавлять Nodes. (Можно также вынести сканирование детей в отдельный Thread.)
Separator (2002-11-04 11:49:00) [3]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;
Separator (2002-11-04 11:27:00) [4]
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 10:57:00) [5]В мемо даже проще, чем в TreeView
Dr. Web (2002-11-04 10:29:00) [6]Идешь на http://www.delphiplus.org- смортишь статью "FastReport: менеджер отчетов - 2" - там все написано (там это дерево присобачено прямо в меню ;)) - от туда мона вырезать куски и сделать то же самое, но с ТриВьювом
P.S. Я так же буду очень благодарен, если вы проголосуете за эту статью. ;)
Anatoly Podgoretsky (2002-11-04 09:13:00) [7]Если в мемо то тебе придется использовать пробелы в начале каждой строки, для выделения уровней.
А так это извечный вопрос данного форуму, не снимаемое заклятие. Ответ есть в ЧаВо
Song (2002-11-04 09:03:00) [8]Соседняя ветка!