![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Посторение дерева
harismatik © (2002-12-18 11:13:00)Как построить дерево папок со ВСЕМИ вложенными папками (без названий файлов а только папки) в компоненте TTreeView? У меня получается построить только до второго уровня. А как глубже опуститься?
Иллюстрация:
У меня: Нужно:
- папка - папка
- подпапка - подпапка
- подпапка - подпапка
- папка - подпапка
-подпапка - подпапка
-подпапка - подпапка
- папка
- подпапка
Я использую процедуры FindFirst, FindNext и FindClose. Может я чего не так делаю?
diMAN (2002-12-18 16:56:00) [1]Небольшое дополнение:
Необходимо заменить
(SearchRec.Attr=faDirectory)
на
((SearchRec.Attr and faDirectory) <> 0),
ведь папки бывают разные :)), в том числе и с установленными
атрибутами faReadOnly, faHidden, faSysFile, faArchive.
Polevi (2002-12-18 13:03:00) [2]сорри, ошибся
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;
Polevi (2002-12-18 12:52:00) [3]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;
Skier (2002-12-18 12:50:00) [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;
harismatik (2002-12-18 11:28:00) [5]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;
Polevi (2002-12-18 11:18:00) [6]cлово рекурсия знакомо тебе ?
Skier (2002-12-18 11:16:00) [7]>harismatik
Код в студию !