Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.035 c
4-99399
PONTIY
2002-11-14 13:56
2002.12.30
Как отловить инициализацию пользоваталем ShutDown?


7-99377
Геннадий
2002-10-08 21:26
2002.12.30
Как создать подобие TaskBar а? Что также крепился и исчезал.


14-99323
kex86
2002-11-21 11:57
2002.12.30
Таракан


1-99133
kalishenko stas
2002-12-18 13:21
2002.12.30
Word


14-99307
Anatoly Podgoretsky
2002-12-08 12:27
2002.12.30
Именинники 8 декабря





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский