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

Вниз

Поиск файлов и TreeView   Найти похожие ветки 

 
DDR   (2008-02-09 20:34) [0]

Добрый вечер, уважаемые мастера!

Помогите пожалуйста разобраться, запутался, сил уже нет.

Задача такая: Попытка написать прогу типа проводника.
Если найдена директория (папка), то добавить в TreeView как первичный узел,
если найдены файлы в этой папке, то добавить к первичному узлу в качестве Child.
И соответственно для папок и файлов показывать в TreeView соответствующие иконки.

Произвожу поиск, но вижу и то и другое, все в качестве первичного узла во всем компоненте :(
Подскажите пожалуйста!


procedure TForm1.Find;
const t = "*.*";
begin
 Dir:= "C:\";
 attr:= faAnyFile;

 findfirst(dir+t,attr1,SR);
 with treeView1 do
   begin
     items.Add(nil,sr.Name);
       while findnext(SR)=0 do
       items.AddChild(nil,sr.Name);
   end;
  findclose(SR);
end;

p.s. была попытка пробежаться примерно следующим путем, но результат тот же.


if (attr and faDirectory) = faDirectory then
treeview1.iems.AddChild(nil, sr.Name)


 
trubin ©   (2008-02-09 20:58) [1]

А компоненты TShellTreeView, TShellListView, TShellComboBox не подойдут.
Ну а так рекурсию тебе в руки.


 
DDR   (2008-02-09 21:04) [2]

Я с ними уже повозился. результаты нормальные. Но мне хочется лучше изучить данный компонент.


 
trubin ©   (2008-02-09 21:14) [3]


> Но мне хочется лучше изучить данный компонент.

TTreeView изучить что-ли? Так читай хелп.
Что конкретно не понятно?


 
DDR   (2008-02-09 21:19) [4]

Мне немного не понятно, как добавить первичный узел, если найдена папка, и добавить дочерний узел, если найдены файлы в этой папке.


 
trubin ©   (2008-02-09 21:24) [5]


> Мне немного не понятно, как добавить первичный узел, если
> найдена папка, и добавить дочерний узел, если найдены файлы
> в этой папке.


var
 n, n1: TTreeNode;

//Добавление в корень

n:= TreeView1.Items.Add(nil, "Root");

//добавление дочернего узла

n1:= TreeView1.Items.AddChild(n, "ChildRoot");


 
DDR   (2008-02-09 21:28) [6]

trubin, спасибо за помощь!
Но я с этим разобрался.
Меня интересует другая тема, если найдена папка, как добавить в корень, а если в этой папке файлы, то как добавить дочерний узел?
Точнее, как в данном случае правильно использовать FindFirst, FindNext ?


 
trubin ©   (2008-02-09 21:46) [7]

Ты уж определись, чего надо. Я же говорил рекурсивно:

procedure TForm1.Fill(ADir: string; AParentNode: TTreeNode);
var
 h: THandle;
 fData: TWin32FindData;
 s: string;
 n: TTreeNode;
begin
 ADir:= IncludeTrailingBackslash(ADir);
 h:= FindFirstFile(PAnsiChar(ADir + "*"), fData);
 if h <> INVALID_HANDLE_VALUE then
 try
   repeat
     s:= fData.cFileName;
     if (s <> ".") and (s <> "..") then
     begin
       n:= TreeView1.Items.AddChild(AParentNode, s);
       if (fData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
         Fill(ADir + s, n);
     end;
   until not FindNextFile(h, fData);
 finally
   Windows.FindClose(h);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 n: TTreeNode;
 s: string;
begin
 s:= "E:\test";
 n:= TreeView1.Items.Add(nil, s);
 Fill(s, n);
end;


 
trubin ©   (2008-02-09 21:47) [8]


> s:= "E:\test";

В смысле C: как ты хотел


 
trubin ©   (2008-02-09 21:53) [9]

А вообще это не правильный путь т.к. занимает время и память.
Правильно для начала показывать только первый уровень. Если у папки есть потомки, то не заполнять ими ветку, а создавать один временный дочерний узел - чтобы "крестик" появился. Когда юзер щелкает по крестику, происходит событие TTreeView.OnExpanding, в котором и заполнять соответствующую ветку.


 
DDR   (2008-02-10 14:41) [10]

Спасибо за помощь!
Все во всем разобрался! На счет памяти - все ок. Код немного оптимизировал. Все работает нормально.
Спасибо ещё раз большое!



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
15-1201715595
oxffff
2008-01-30 20:53
2008.03.09
Ищу работу.


4-1184068039
Инс
2007-07-10 15:47
2008.03.09
fs:


3-1192611419
Ksander
2007-10-17 12:56
2008.03.09
TreeVies &amp; IB


15-1201843206
Uno-84
2008-02-01 08:20
2008.03.09
Удаленный отладчик


2-1202655439
Artem
2008-02-10 17:57
2008.03.09
Проблема с TStrings