![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 11.01.2008
Сообщений: 42
|
![]()
Можете помочь с такой проблемой?
Нужно загладки браузера Опера загрузить в компонент (VirtualStringTree) в виде дерева. Вот пример файла загладок: Код:
В итоге, в комноненте, результат должен выглядеть примерно так: Код:
Буду признателен за любую подсказку, помощь. |
![]() |
![]() |
![]() |
#2 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Папка - это родительский узел дерева.
Подпапка или УРЛ - детки этого узла. Итак. Кидаем на форму TreeView, тыкаем в него мышкой, чтобы выделить, а потом жмем пимпу F1. Вываливается хэлп по ТTreeView. Выбираем его свойства, в них - свойство Items, у него тыркаем по его классу TTreeNodes, в TTreeNodes выбираем методы, а в них, например AddChild. На открывшейся страничке тыркаем по надписи "Delphi example". А вот там, о чудо - совершенно готовый к употреблению пример Цитата:
|
|
![]() |
![]() |
![]() |
#3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
![]()
Правильно, остается только считать из файла, и проанализировать мол если считанная строка #FOLDER то ТTreeView.add, если #URL то ТTreeView.addChild причем применительно к текущему, и после добавления запомнить текущий
О и еще если встретилось "-" то подняться на уровень выше )
I'm learning to live...
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 11.01.2008
Сообщений: 42
|
![]()
Наверное я не совсем ясно выразился.
Мне нужно только считать из файла и создать древовидную структуру. Вот что мне удалось сделать, но я не уверер что ошибок нет. Смог только загрузить папки, с ссылками пока не получается. Код:
|
![]() |
![]() |
![]() |
#5 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Мне алгоритм видится примерно таким образом:
1. Ваша строка if Trim(s) = '#FOLDER' then //........Если папка begin ... 2. Очевидно, что нужно брать вторую строку после этой или, если строже - искать подстроку "NAME=". Это и будет имя узла. Создаем его. 3. Аналогично для УРЛа - 2 и 3-я строки - наименование и урл - параметры создаваемого "детеныша". 4. Если же после решетки встретился не #URL, а #FOLDER, то (если до этого не встретился "-") - создаем подчиненный узел - подпапку. 5. А вот если встретился "-", то идем к 1 шагу... С Date мне кажется, вы что-то перемудрили... Все узлы имеют имя (NAME), и только "бездетные" УРЛы - имеют DATE.URL. Последний раз редактировалось mihali4; 12.02.2008 в 12:50. |
![]() |
![]() |
![]() |
#6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
![]()
Кстати есть еще один способ:
Код:
I'm learning to live...
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 11.01.2008
Сообщений: 42
|
![]()
Всем спасибо, в общем с загрузкой я разобрался. Но теперь мне надо например из программы, переместить одну или несколько ссылок и папок в другую папку, между собой, удалить ссылки, папки, и т.д.
Как это сделать, как понять что и где находится, как переместить строки куда надо в этом самом файле? |
![]() |
![]() |
![]() |
#8 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Если я вас правильно понял, решить это можно следующим образом:
1. Произведите все нужные операции НАД ДЕРЕВОМ 2. Напишите процедуру, обратную той, которая послужила причиной создания темы - т.е. процедуру создания нового файла из дерева. Поскольку с первой задачей вы, кажется, разобрались до конца, то решить эту для вас не составит труда. Тем более, что она гораздо проще... |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 11.01.2008
Сообщений: 42
|
![]()
Такая идея у меня возникала, но появляется другая проблема. Ведь кроме строк с именами, ссылками, существуют еще и другие, с разными данными описывающие эти самые папки и ссылки. Тогда получается что они будут уничтоженны, и боюсь что пользователи пошлют меня лесом, за такое решение. А если искать для каждой ветки в файле, дополнительные данные, то не возникнут тормоза? А если одинаковых ссылок будет несколько, и у каждой свое описание? Снова придется определять, что, да где находится. Как в таком случае поступить?
Последний раз редактировалось mihali4; 21.12.2009 в 23:30. |
![]() |
![]() |
![]() |
#10 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Все эти проблемы вы придумали, чтобы напугать самого себя.
"Разные данные" при построении дерева ассоциируются с каждым нодом в виде объекта (к примеру, метод AddObject, а не Add) и могут быть точно так же восстановлены в файл. Искать их не нужно. Как только вы выбираете какой-либо НОД, в вашем распоряжении тут же оказывается его объект, к любому свойству которого вы спокойно обращаетесь. Какое замедление??? В дереве нет одинаковых НОДов и для определения "что, да где находится" есть методы для Children-ов и Parent-ов. Вся эта проблема решается за один проход по дереву сверху вниз, лучше - рекурсивно. Последний раз редактировалось mihali4; 21.12.2009 в 23:31. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Возможно реализовать такое | Devourer12345 | Microsoft Office Access | 10 | 15.08.2008 08:08 |
3D фигуры, как реализовать? | Nikiforov | Помощь студентам | 2 | 22.02.2008 00:24 |
можно ли такое реализовать | Димарик | Общие вопросы Delphi | 6 | 22.07.2007 13:18 |
то такое мастерство в программировании, что такое мастер программист и что он может? | Cezar | Свободное общение | 29 | 02.06.2007 23:48 |
Как реализовать ASin | Romanus | Общие вопросы C/C++ | 2 | 16.04.2007 09:46 |