![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Файлы и папки в TTreeView
Kolya © (2002-12-09 10:26:00)Необходимо показать файлы и папки в иерархическом "дереве". Есть ли ресурсы позволяющие сделать это в компонентах TTreeView и TOutline или придется делать вручную?
Kolya (2002-12-09 16:05:00) [1]Separator, спасибо за код- все работет. Нужно будет добавить в него возможность поиска файлов с маской, но думаю это не составит особово труда.
Separator (2002-12-09 10:59:00) [2]Забыл сказать, что эта функция выдает только каталоги, для файлов нужно заменить:
repeat
Application.ProcessMessages;
if lpFindFileData.cFileName[0] <> "." then
if (lpFindFileData.dwFileAttributes and $00000010) = $00000010 then
FindDirs(Path + lpFindFileData.cFileName + "\", Node.Owner.AddChild(Node, lpFindFileData.cFileName))
else
Node.Owner.AddChild(Node, lpFindFileData.cFileName)
until not Windows.FindNextFile(hFindFile, lpFindFileData);
Бутет работать довольно долго, пока не просканирует все папки начиная с исходной
Separator (2002-12-09 10:45:00) [3]
function GetDirs(Dir: string; Nodes: TTreeNodes; NodesClear: boolean = false): boolean;
var
Recurse: boolean;
procedure FindDirs(Path: string; Node: TTreeNode);
var
lpFindFileData: _WIN32_FIND_DATAA;
hFindFile: Cardinal;
begin
hFindFile:= Windows.FindFirstFile(PChar(Path + "*.*"), lpFindFileData);
if Windows.GetLastError <> INVALID_HANDLE_VALUE then
repeat
Application.ProcessMessages;
if ((lpFindFileData.dwFileAttributes and $00000010) = $00000010) and (lpFindFileData.cFileName[0] <> ".") then
FindDirs(Path + lpFindFileData.cFileName + "\", Node.Owner.AddChild(Node, lpFindFileData.cFileName))
until not Windows.FindNextFile(hFindFile, lpFindFileData);
Windows.FindClose(hFindFile)
end;
begin
if Dir[Length(Dir)] <> "\" then
Dir:= Dir + "\";
if not DirectoryExists(Dir) then
begin
Result:= false;
exit
end;
if NodesClear then
Nodes.Clear;
FindDirs(Dir, Nodes.AddChild(nil, Copy(Dir, 1, Length(Dir) - 1)));
with Nodes.GetFirstNode do
if HasChildren then
Expand(Recurse);
Result:= true
end;
Dirs - исходная директория
Nodes - любой TreeView.Items
Song (2002-12-09 10:36:00) [4]Конечно вручную с рекурсией.
В Д6 есть правда Shell компоненты, могут пригодиться, но без документации.