procedure FillTreeViewWithFiles(TreeView1: TTreeView; Strs: TStringList);
var
CachedStrs: TStringList;
procedure AddItem(Lev: Integer; ParentNode: TTreeNode; S: string);
function FindNodeWithText(AParent: TTreeNode; const S: string): TTreeNode;
var
K: Integer;
fStr: string;
tmpNode: TTreeNode;
begin
Result := nil;
fStr := S + IntToStr(Integer(AParent));
K := CachedStrs.IndexOf(fStr);
if K > -1 then
Result := Pointer(CachedStrs.Objects[K])
else
begin
if AParent <> nil then
tmpNode := AParent.getFirstChild
else
tmpNode := TreeView1.Items.GetFirstNode;
while tmpNode <> nil do
begin
if tmpNode.Text = S then
begin
Result := tmpNode;
CachedStrs.AddObject(fStr, Pointer(tmpNode));
break;
end;
tmpNode := tmpNode.getNextSibling;
end;
end
end;
var
prefix: string;
ID: Integer;
aNode: TTreeNode;
begin
if S = '' then
Exit;
ID := Pos('\', S);
prefix := '';
if ID > 0 then
prefix := Copy(S, 1, ID - 1)
else
begin
prefix := S;
S := '';
end;
aNode := FindNodeWithText(ParentNode, prefix);
if aNode = nil then
begin
aNode := TreeView1.Items.AddChild(ParentNode, prefix);
end;
AddItem(Lev + 1, aNode, Copy(S, ID + 1, Length(S)));
end;
var
K: Integer;
begin
CachedStrs := TStringList.Create;
CachedStrs.Duplicates := dupIgnore;
CachedStrs.Sorted := True;
try
TreeView1.Items.BeginUpdate;
TreeView1.SortType := stNone;
for K := 0 to Strs.Count - 1 do
AddItem(0, nil, Strs[K]);
finally
TreeView1.Items.EndUpdate;
CachedStrs.Free;
end;
end;
Treeview (получить пути к файлам)
Помогите пожалуйста решить проблему следующего характера.
На форме есть Treeview, в него грузятся пути из файла
следующим образом:
Код:
для загрузки структуры использую следующее
Код:
var
Strs: TStringList;
begin
Strs := TStringList.Create;
try
Strs.LoadFromFile(ExtractFilePath(Application.ExeName)+'paths.txt');
FillTreeViewWithFiles(TreeView1, Strs);
finally
Strs.Free;
end;
Strs: TStringList;
begin
Strs := TStringList.Create;
try
Strs.LoadFromFile(ExtractFilePath(Application.ExeName)+'paths.txt');
FillTreeViewWithFiles(TreeView1, Strs);
finally
Strs.Free;
end;
Проблема в следующем:
как при двойном клике на папке, получить список всех файлов с указанием полного пути, включая вложенные папки?
Например:
При двойном клике на папке "Animals" я должен получить
Animals\Desktop.ini
Animals\Thumbs.db
Animals\Собаки\Black and white.jpg
Animals\Собаки\Desktop.ini
Animals\Собаки\Dog.jpg
Animals\Собаки\Dog1.jpg
Animals\Собаки\Mamm051.jpg
Animals\Собаки\Mamm052.jpg
Animals\Собаки\Mamm053.jpg
Animals\Собаки\Mamm054.jpg
Animals\Собаки\Mamm055.jpg
Animals\Собаки\Mamm056.jpg
Animals\Собаки\Mamm057.jpg
Animals\Собаки\Mamm058.jpg
Animals\Собаки\Puppies.jpg
Animals\Собаки\Puppy in a basket.jpg
Animals\Собаки\Puppy.jpg
Animals\Собаки\Афган.jpg
Animals\Собаки\Лайка.jpg
Animals\Собаки\Пойнтер.jpg
Animals\Собаки\Спаниель.jpg
Animals\Собаки\Таксы.jpg
Animals\Слоны\Desktop.ini
Animals\Слоны\Mamm046.jpg
Animals\Слоны\Thumbs.db
Animals\Слоны\Молодой слон.jpg
Animals\Рептилии\Desktop.ini
Animals\Рептилии\Rept001.jpg
Animals\Рептилии\Rept002.jpg
Animals\Рептилии\Rept003.jpg
Animals\Рептилии\Rept004.jpg
Animals\Рептилии\Rept005.jpg
Animals\Рептилии\Rept006.jpg
Animals\Рептилии\Rept007.jpg
Animals\Рептилии\Rept008.jpg
Animals\Рептилии\Rept009.jpg
Animals\Рептилии\Rept010.jpg
Animals\Рептилии\Rept011.jpg
Animals\Рептилии\Rept012.jpg
Animals\Рептилии\Rept013.jpg
Animals\Рептилии\Жаба.jpg
Animals\Рептилии\Thumbs.db
Animals\Птицы\Bird001.jpg
Animals\Птицы\Bird002.jpg
Animals\Птицы\Bird003.jpg
Animals\Птицы\Bird004.jpg
Animals\Птицы\Bird005.jpg
Animals\Птицы\Bird006.jpg
Animals\Птицы\Bird007.jpg
Animals\Птицы\Bird008.jpg
Animals\Птицы\Bird009.jpg
Animals\Птицы\Bird010.jpg
Animals\Птицы\Bird011.jpg
Animals\Птицы\Bird012.jpg
Animals\Птицы\Bird013.jpg
Animals\Птицы\Bird014.jpg
Animals\Птицы\Bird015.jpg
Animals\Птицы\Bird016.jpg
Animals\Птицы\Bird017.jpg
Animals\Птицы\Bird018.jpg
Animals\Птицы\Bird019.jpg
Animals\Птицы\Bird020.jpg
Animals\Птицы\Bird021.jpg
Animals\Птицы\Bird022.jpg
Animals\Птицы\Bird023.jpg
Animals\Птицы\Bird024.jpg
Animals\Птицы\Birds.jpg
Animals\Птицы\Desktop.ini
Animals\Птицы\орёл степной.jpg
Animals\Птицы\Thumbs.db
Animals\Обезьяны\Desktop.ini
Animals\Обезьяны\Mamm048.jpg
Animals\Обезьяны\Thumbs.db
Animals\Обезьяны\Орангутан.jpg
При двойном клике на папке "Птицы" я должен получить
Animals\Птицы\Bird001.jpg
Animals\Птицы\Bird002.jpg
Animals\Птицы\Bird003.jpg
Animals\Птицы\Bird004.jpg
Animals\Птицы\Bird005.jpg
Animals\Птицы\Bird006.jpg
Animals\Птицы\Bird007.jpg
Animals\Птицы\Bird008.jpg
Animals\Птицы\Bird009.jpg
Animals\Птицы\Bird010.jpg
Animals\Птицы\Bird011.jpg
Animals\Птицы\Bird012.jpg
Animals\Птицы\Bird013.jpg
Animals\Птицы\Bird014.jpg
Animals\Птицы\Bird015.jpg
Animals\Птицы\Bird016.jpg
Animals\Птицы\Bird017.jpg
Animals\Птицы\Bird018.jpg
Animals\Птицы\Bird019.jpg
Animals\Птицы\Bird020.jpg
Animals\Птицы\Bird021.jpg
Animals\Птицы\Bird022.jpg
Animals\Птицы\Bird023.jpg
Animals\Птицы\Bird024.jpg
Animals\Птицы\Birds.jpg
Animals\Птицы\Desktop.ini
Animals\Птицы\орёл степной.jpg
Animals\Птицы\Thumbs.db
В архиве скрины и файл paths.txt
разобрался, тему можно закрыть