Текущий архив: 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