Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2018, 23:46   #1
Fakov
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 85
По умолчанию TreeView - выстроить древо списку из StringList

Всем привет. Помогите построить древо в TreeView по существующему списку.

Допустим, в StringList у меня хранятся строки:

fileX.tpl
fileZ.wta
archive1.rar
FolderA\subfolderA\fileY.txt
FolderC\subfolderC\fileC.jpg
FolderK\fileK.pts

Как правильно выстроить древо в TreeView, чтобы в итоге у меня отобразилось в нем 3 папки из которых две с подпапками и фалами внутри, и тремя просто лежащими "в корне" каталога файлами???

Есть ли как то урок или пример решения подобной задачи? Я пытался через поиск разделителя создавать узел в древе, но не понимаю как тогда быть с подпапками (сам узел я создать так и не смог с подпапками, не понимаю как это делать).
Fakov вне форума Ответить с цитированием
Старый 15.07.2018, 17:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
procedure AddNode(Node: TTreeNode; Text: String);
var j: Integer;
    s1,s2: String;
    n: TTreeNode;
begin
  j:=Pos('\',Text);
  if j>0 then begin s1:=Copy(Text,1,j-1); s2:=Copy(Text,j+1,Length(Text)); end
         else begin s1:=Text; s2:=''; end;
  n:=nil;
  if Node=nil then begin
    for j:=0 to TreeView1.Items.Count-1 do
      if TreeView1.Items.Item[j].Text=s1 then begin n:=TreeView1.Items.Item[j]; Break; end;
    if n=nil then n:=TreeView1.Items.Add(nil,s1);
  end
  else begin
    for j:=0 to Node.Count-1 do
      if Node.Item[j].Text=s1 then begin n:=Node.Item[j]; Break; end;
    if n=nil then n:=TreeView1.Items.AddChild(Node,s1);
  end;
  if s2<>'' then AddNode(n,s2);
end;

...

  TreeView1.Items.BeginUpdate;
  for i:=0 to List.Count-1 do AddNode(nil,List.Strings[i]);
  TreeView1.Items.EndUpdate;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.07.2018, 10:11   #3
Fakov
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 85
По умолчанию

спасибо.
Fakov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выстроить компоненты Image в 2 строки программно? kkk-it WPF, UWP, WinRT, XAML 2 07.08.2017 17:30
Реферальное древо prizrak1390 PHP 1 05.10.2015 08:00
в программе выстроить правильно прерывание для контроллера ATmega8 pochti_poluchilos Помощь студентам 1 01.04.2015 19:37
Поиск и удаление строк в StringList из другово stringlist SmoK777 Общие вопросы Delphi 3 06.08.2012 08:21
древо каталогов Dunpeal Компоненты Delphi 6 21.11.2006 06:22