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

Вниз

Посторение дерева   Найти похожие ветки 

 
harismatik   (2002-12-18 11:13) [0]

Как построить дерево папок со ВСЕМИ вложенными папками (без названий файлов а только папки) в компоненте TTreeView? У меня получается построить только до второго уровня. А как глубже опуститься?
Иллюстрация:
У меня: Нужно:

- папка - папка
- подпапка - подпапка
- подпапка - подпапка
- папка - подпапка
-подпапка - подпапка
-подпапка - подпапка
- папка
- подпапка

Я использую процедуры FindFirst, FindNext и FindClose. Может я чего не так делаю?


 
Skier ©   (2002-12-18 11:16) [1]

>harismatik
Код в студию !


 
Polevi ©   (2002-12-18 11:18) [2]

cлово рекурсия знакомо тебе ?


 
harismatik   (2002-12-18 11:28) [3]

2 Polevi - знакомо, только не пойму, как ее вызвать в моем случае. Вот фрагмент моего кода:


Procedure FindAllForTreeView(Path:String; TreeView:TTreeView);
var SearchRec:TSearchRec;
begin
TreeView.Items.Add(nil,Path);
TreeView.Items.Item[0].ImageIndex:=1;
TreeView.Items.Item[0].SelectedIndex:=2;
if FindFirst(Path,faDirectory,SearchRec)=0 then
try
if (SearchRec.Name<>".") and (SearchRec.Name<>"..") then
begin
treeView.Items.AddChild(TreeView.Items.Item[0],SearchRec.Name);
TreeView.Items.Item[1].ImageIndex:=1;
TreeView.Items.Item[1].SelectedIndex:=2;
end;
while FindNext(SearchRec)=0 do
begin
if (SearchRec.Name<>".") and (SearchRec.Name<>"..") then
begin
if (SearchRec.Attr and faDirectory=faDirectory) then
begin
TreeView.Items.AddChild(TreeView.Items.Item[0],SearchRec.Name);
TreeView.Items.Item[TreeView.Items.Count-1].ImageIndex:=1;
TreeView.Items.Item[TreeView.Items.Count-1].SelectedIndex:=2;
end;
end;
end;
finally
FindClose(SearchRec);
TreeView.AlphaSort;
end;
end;



 
Skier ©   (2002-12-18 12:50) [4]

>harismatik
Ну вот как-то так :


procedure TForm1.Button1Click(Sender: TObject);

Procedure FindAllForTreeView(Path:String; TreeView:TTreeView; ACurrNode : TTreeNode);
var
ASearchRec : TSearchRec;
AFound : Boolean;
begin
if ACurrNode = nil then begin
TreeView.Items.Add(nil,Path);
ACurrNode := TreeView.Items.Item[0];
end; //if
try
if Path[Length(Path)] <> "\" then Path := Path + "\";
AFound := FindFirst(Path + "*.*",faAnyFile,ASearchRec) = 0;
while AFound do begin
if (ASearchRec.Name <> ".") and (ASearchRec.Name <> "..")
and (ASearchRec.Attr and faDirectory=faDirectory) then begin
ACurrNode := TreeView.Items.AddChild(ACurrNode,ASearchRec.Name);
FindAllForTreeView(Path + ASearchRec.Name + "\", TreeView, ACurrNode);
ACurrNode := ACurrNode.Parent;
end; //if
AFound := FindNext(ASearchRec) = 0;
end; //while
finally
FindClose(ASearchRec);
end; //try
end;//FindAllForTreeView

begin
FindAllForTreeView("C:\WINNT", TreeView1, nil);
end;


 
Polevi ©   (2002-12-18 12:52) [5]

procedure TForm1.BuildTree(Path: string; Node: TTreeNode);
var
SearchRec:TSearchRec;
begin
if FindFirst(Path+"\*.*",faDirectory,SearchRec)=0 then
repeat
if (SearchRec.Name<>".") and (SearchRec.Name<>"..") and (SearchRec.Attr=faDirectory) then
BuildTree(Path+SearchRec.Name,TTreeView(Node.TreeView).Items.AddChild(Node,SearchRec.Name));
until FindNext(SearchRec)<>0;
FindClose(SearchRec);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.Items.Add(nil,"Root");
BuildTree("c:",TreeView1.Items[0]);
end;


 
Polevi ©   (2002-12-18 13:03) [6]

сорри, ошибся

procedure TForm1.BuildTree(Path: string; Node: TTreeNode);
var
SearchRec:TSearchRec;
begin
if FindFirst(Path+"*.*",faDirectory,SearchRec)=0 then
repeat
if (SearchRec.Name<>".") and (SearchRec.Name<>"..") and (SearchRec.Attr=faDirectory) then
BuildTree(Path+SearchRec.Name+"\",TTreeView(Node.TreeView).Items.AddChild(Node,SearchRec.Name));
until FindNext(SearchRec)<>0;
FindClose(SearchRec);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.Items.Add(nil,"Root");
BuildTree("d:\",TreeView1.Items[0]);
end;


 
diMAN ©   (2002-12-18 16:56) [7]

Небольшое дополнение:

Необходимо заменить
(SearchRec.Attr=faDirectory)
на
((SearchRec.Attr and faDirectory) <> 0),
ведь папки бывают разные :)), в том числе и с установленными
атрибутами faReadOnly, faHidden, faSysFile, faArchive.



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
14-99356
Uran
2002-12-10 16:12
2002.12.30
Программа для чтения этого форума.


1-99138
Брат
2002-12-18 12:46
2002.12.30
Как сделать стандартное оформление для разных компьютеров?


14-99354
axe
2002-12-11 10:42
2002.12.30
Как уменьшить размер exe-файла?


1-99114
GIL
2002-12-13 06:11
2002.12.30
Проблемы с Listbox


3-99019
Emfi
2002-12-09 19:10
2002.12.30
Блокировка таблиц в MS SQL.