Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивный поиск в TreeView 
:(
    Опции темы
uwannadie
Дата 22.6.2009, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



помогите разобраться с проблемкой
надо получить из такого:
user posted image
получить путь к листьям(фактически путь к файлу) и сохранить этот путь в файл
пробовал с помощью рекурсивного обхода дерева, но не получилось, т.к. не имел опыта работы с подобными компонентами.

Это сообщение отредактировал(а) uwannadie - 22.6.2009, 03:58
--------------------
PM MAIL   Вверх
vunder
Дата 22.6.2009, 08:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.6.2009

Репутация: нет
Всего: нет



Сначала получаешь указатель на выделенный элемент дерева через свойство Selected. Далее в цикле обращается к свойству Parent, пока оно не nil. Например вот так:
Код

function GetPath: String;
var
  Child: TTreeNode;
begin
  Child := TreeView1.Selected;
  Result := EmptyStr;
  while Assigned(Child) do begin
    Result := Child.Text+PathDelim+Result;
    Child := Child.Parent;
  end;
end;


Это сообщение отредактировал(а) vunder - 22.6.2009, 08:13
PM MAIL   Вверх
uwannadie
Дата 22.6.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



проблему решил. все оказалось намного банальнее smile

вот исходный код (может кому пригодится):
получение пути к узлу(взято из DelphiWorld и модифицировано под данную задачу):
Код

function SrNodeTree(pTreeNode: TTreeNode; var sRuta: string): string; 
begin
  sRuta := pTreeNode.Text + '\' + sRuta;
  if pTreeNode.Level = 0 then
    Result := Copy(sRuta,0, Length(sRuta) - 1)
  else
    Result := SrNodeTree(pTreeNode.Parent, sRuta);
end;

сам поиск(сохраняет пути из дерева в файл с проверкой состояния выделения чекбоксов у листьев дерева):
Код

procedure TreeToFilePath(aTreeView: TJvCheckTreeView);
var
  sPath, Tmp,CH: String;
  i: integer;
begin
  AssignFile(Output, ExtractFilePath(Application.ExeName)+'\tree.txt');
  Rewrite(Output);
  for i := 0 to aTreeView.Items.Count - 1 do
  begin
    sPath := '';//путь к листу
    Tmp := '';//путь к родительским ветвям листа
    CH := '';//проверка состояния чекбоксов у листьев
    if aTreeView.Items.Item[i].HasChildren = False then
    begin
      if aTreeView.Checked[aTreeView.Items.Item[i]] = True then
        CH := 'CB_YES' else CH := 'CB_NO';
      sPath := '\' + SrNodeTree(aTreeView.Items[i], Tmp);
      Writeln(Output,CH,'|',sPath);
    end;
  end;
  CloseFile(Output);
end;


Это сообщение отредактировал(а) uwannadie - 22.6.2009, 16:16
--------------------
PM MAIL   Вверх
le0ne
Дата 19.11.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



Есть дерево построенное по результату процедуры БД в TTreeView,
Как определить последнего потомка каждого корня и добавить к ним новых потомков?

Пытался таким образом:
Код

Procedure TForm1.ExpandLevelWplace ;
var TreeNode : TTreeNode;
    i : integer;
Begin
     for i:= TVOrg.Items.Count-1 downto 0 do 
        TreeNode := ScanNodes(TVOrg.Items.Item[i]);
    TVOrg.Items.AddChild(TreeNode, 'Рабочие места');
end;

function TForm1.ScanNodes(Node: TTreeNode) : TTreeNode;
    begin
        Node := Node.GetFirstChild;
    while  Node <> nil  do begin
      if  Node.HasChildren  then
        ScanNodes(Node)
      else
      Node := Node.getNextSibling;
    end;
   
end;




Это сообщение отредактировал(а) le0ne - 19.11.2009, 17:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.