Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.011 c
15-1202135900
oldman
2008-02-04 17:38
2008.03.09
Где можно бесплатно завести большой почтовый ящик?


6-1181044210
WebSQLNeederr
2007-06-05 15:50
2008.03.09
Програмно кликнуть на ссылку из ТВебБровзера


15-1201900320
ProgRAMmer Dimonych
2008-02-02 00:12
2008.03.09
Подскажите, плз, направление поиска


15-1200865358
TStas
2008-01-21 00:42
2008.03.09
Беда с флешкой


2-1202914748
алекс2
2008-02-13 17:59
2008.03.09
TFileStream +контрольная сумма




   Наверх