Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
ВнизФайлы и папки в TTreeView Найти похожие ветки
← →
Kolya (2002-12-09 10:26) [0]Необходимо показать файлы и папки в иерархическом "дереве". Есть ли ресурсы позволяющие сделать это в компонентах TTreeView и TOutline или придется делать вручную?
← →
Song (2002-12-09 10:36) [1]Конечно вручную с рекурсией.
В Д6 есть правда Shell компоненты, могут пригодиться, но без документации.
← →
Separator (2002-12-09 10:45) [2]
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
← →
Separator (2002-12-09 10:59) [3]Забыл сказать, что эта функция выдает только каталоги, для файлов нужно заменить:
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);
Бутет работать довольно долго, пока не просканирует все папки начиная с исходной
← →
Kolya (2002-12-09 16:05) [4]Separator, спасибо за код- все работет. Нужно будет добавить в него возможность поиска файлов с маской, но думаю это не составит особово труда.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c