Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Treeview (получить пути к файлам)

330
08 октября 2011 года
kastron
215 / / 17.09.2006
Всем привет!
Помогите пожалуйста решить проблему следующего характера.
На форме есть Treeview, в него грузятся пути из файла

следующим образом:

Код:
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;


для загрузки структуры использую следующее

 
Код:
var
  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
330
10 октября 2011 года
kastron
215 / / 17.09.2006
разобрался, тему можно закрыть
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог