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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запомнить выбранный узел, в VirtualStringTree 
:(
    Опции темы
Pavelbej
Дата 5.12.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте!

В VirtualStringTree загружаю папки из выбранной директории. Получается древовидная структура. Так вот, как запомнить выбранный узел, и при следующем старте программы автоматически его выделить. Не могу понять, как это сделать? Куда копать?
PM MAIL   Вверх
VICTAR
Дата 5.12.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Скорей всего запомнить файл, который выделен. Потом при загрузке найти узел, "отвечающий" за этот файл и выделить. 
PM MAIL   Вверх
Pavelbej
Дата 5.12.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(VICTAR @  5.12.2007,  22:19 Найти цитируемый пост)
Скорей всего запомнить файл, который выделен. Потом при загрузке найти узел, "отвечающий" за этот файл и выделить. 


Ну, как один из вариантов, я так и предполагал (ведь при следующем старте, этой папки может уже и не существовать).
Но вот как пройтись по узлам, по их дочерним узлам, и найти этот путь?
PM MAIL   Вверх
VICTAR
Дата 6.12.2007, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Pavelbej @  5.12.2007,  23:26 Найти цитируемый пост)
Но вот как пройтись по узлам, по их дочерним узлам, и найти этот путь? 

обычной рекурсией
PM MAIL   Вверх
Alexeis
Дата 6.12.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



  Деревья красиво сохраняются в виде XML. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Pavelbej
Дата 6.12.2007, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(VICTAR @  6.12.2007,  00:14 Найти цитируемый пост)
обычной рекурсией 


Что-то я совсем запутался. Значит так, беру имя корневой папки - это RootNode, так? Дальше я должен искать дочерний узел с именем который идет после корневой папки (из сохраненного пути). Как только нашел, но путь не совпадает (т.е. длиннее сохраненный), лезем в него и ищем дальше в дочерних. Вроде так?
Если все верно то с логикой все в порядке, а вот с чего начать писать код, ну никак не соображу, или может уже поздно.

Цитата(Alexeis @  6.12.2007,  00:36 Найти цитируемый пост)
Деревья красиво сохраняются в виде XML.  


А зачем лишние маневры, проверки, если есть папки.
PM MAIL   Вверх
AriX
Дата 6.12.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Pavelbej
Цитата
Если все верно то с логикой все в порядке, а вот с чего начать писать код, ну никак не соображу, или может уже поздно.

Сохранять выделенный нод можно, например, с помощью функции Path у VirtualStringView.

Загружаешь сохраненный путь. Идёшь по нему циклом, поиск по разделителю (/ или \). Найдя имя очередной папки, ищещь ее в children'ах текущего parent-нода. Если найдешь - меняешь parent-нод на найденный; если нет - можно оставить выделенным последний найденный или сделать что-то другое. И так, пока в пути не будет найден разделитель -- т.е. дошли до имени файла. Опять же, ищешь его в текущем parent-ноде.
PM MAIL   Вверх
Pavelbej
Дата 7.12.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот что удалось сделать:

Функция поиска
Код

function TForm1.FindNodeSelect(ANode: PVirtualNode; const APattern: WideString): PVirtualNode;
  var
    NextNode: PVirtualNode;
    PhoneNode: PLinksCollector;
  begin
    Result := nil;
    NextNode := ANode.FirstChild;
    if Assigned(NextNode) then
      repeat
        PhoneNode := VTCateg.GetNodeData(NextNode);
        if Assigned(PhoneNode) then
          if PhoneNode^.Category = APattern then
            begin
              Result := NextNode;
              Exit;
            end;
        Result := FindNodeSelect(NextNode, APattern);
        NextNode := NextNode.NextSibling;
      until  NextNode = nil;
  end;


При создании формы
Код

    if VTCateg.RootNodeCount > 0 then
        begin
          FoundNode := FindNodeSelect(VTCateg.RootNode, {мой текст});
          if Assigned(FoundNode) then
            begin
                VTCateg.Selected[FoundNode] := True;
                VTCateg.FocusedNode:=FoundNode;
                VTCateg.Expanded[FoundNode]:=true;
            end;
        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.1125 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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