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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обход дерева, поиск значения в дереве. 
V
    Опции темы
AleksandraN
Дата 21.8.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем, добрый день!
Проблема в следующем: необходимо развернуть дерево до определенного (заданного) узла (задан даже не узел а значение в узле) 
делаю так
Код

procedure TfrmSCREdit.ExpandTree( selectedData: integer);
var
 Node : TTreeNode;
 i, s: integer;
begin
// поиск значение в дереве
  Node := tvwSCR.Items.GetFirstNode; { tvwSCR - заданное дерево}
  Node := Node.GetNext;                       {selectedData - значение, которое необходимо найти в дереве}
    While Node <> nil do
     begin
      s := Integer(Node.Data);
      If Integer(Node.Data) = selectedData then
        Node.Selected := true
      else Node.Selected := false;
      Node := Node.GetNext;
     end;
// раскрытие дерева
  Node.Expanded:=true;
  i := Node.Level;
  while i >0 do
  begin
    Node := Node.Parent;
    Node.Expanded := true;
    i:= i-1;
  end;
end;

возникает проблема с обходом дерева и поиска значения в дереве...естественно в моем варианте он обходит только первый уровень иерархии...а как сделать так, чтоб он обходил дерево полность не соображу..
PM MAIL   Вверх
Keeper89
Дата 21.8.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Попробуйте:
Код

procedure TfrmSCREdit.ExpandTree( selectedData: integer);
var
 Node : TTreeNode;
 i, s: integer;
begin
// поиск значение в дереве
  Node := tvwSCR.Items.GetFirstNode; { tvwSCR - заданное дерево}
                {selectedData - значение, которое необходимо найти в дереве}
    While (Node <> nil) and (Integer(Node.Data) <> selectedData) do
     begin
       Node.Expand(False);         
       Node := Node.GetNext;
     end;
  Node.Selected := true
end;



--------------------
PM MAIL WWW   Вверх
AleksandraN
Дата 21.8.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я видимо не точно сформулировала...надо что раскрывалась, только та ветка, на которой находится узел с заданным значением...ну и не всся, а только до этого узла...
PM MAIL   Вверх
AleksandraN
Дата 21.8.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем получилось у меня)) 
Сделала так:
Код

procedure TfrmSCREdit.ExpandTree( selectedData, level: integer);
var
   Node : TTreeNode;
   i, s: integer;
begin
   i := 0;
   tvwSCR.Visible := false;
   tvwSCR.FullExpand;
   While (Node = nil) and (i < tvwSCR.Items.Count) do
    begin
      if (integer(tvwSCR.Items[i].Data) = selectedData) then Node := tvwSCR.Items[i];
      i := i + 1;
    end;
   tvwSCR.FullCollapse; {если так не делать не очень красиво получается, оно дергается , а так получается приятно для глаза}
   if (Node <> nil) then
    begin
      i := Node.Level;
      Node.Selected := true;
      while i > 0 do
       begin
         Node := Node.Parent;
         Node.Expanded := true;
         i:= i-1;
      end;
    end;
   tvwSCR.Visible := true;
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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