Главная страница
    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.46 MB
Время: 0.008 c
3-98993
xenon
2002-12-10 13:03
2002.12.30
Инкрементный поиск в TDBLookupComboBox


1-99068
Kosmach
2002-12-15 20:49
2002.12.30
Обработка событий у динамически созданных объектов


14-99274
Anatoly Podgoretsky
2002-12-07 17:49
2002.12.30
Эстонская всреча Мастаков


14-99279
Оливейра
2002-12-08 22:14
2002.12.30
---|Ветка была без названия|---


1-99045
безумный ламер
2002-12-19 11:34
2002.12.30
binmode





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский