Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.02;
Скачать: CL | DM;

Вниз

Как сделать ссылку ветки TreeNode на данные в ListBox   Найти похожие ветки 

 
MZG   (2008-02-06 11:07) [0]

Подскажите пожалуйста, как можно связать конкретную ветку компонента TreeView (TreeNode) с данными компонента ListBox?


 
Смирнов   (2008-02-06 11:50) [1]

TTreeNode.Data типа pointer. Через него и связывай.


 
Игорь Шевченко ©   (2008-02-06 11:53) [2]

Я вроде ссылку давал в твоей предыдущей ветке.
Не помогло или не скачалось ?


 
{RASkov} ©   (2008-02-06 12:07) [3]

> [0] MZG   (06.02.08 11:07)

S:=TStringList.create;
S.Add("New Str");
TreeView.Items.Add(nil "Item").Data:=S;


Достаем:
ListBox.Items.Assign(TStrings(TreeNode.Data));


 
MZG   (2008-02-06 13:38) [4]

У меня инет тормозной. Едва скачал. Разобрался, но немного.

Только из поста [3] есть вопрос один.
Если саму структуру TreeView и содержимое списка ListBox сохранить в файл. То реально ли в дальнейшем работать? Я имею в виду, сохраняться ли ссылки дерева и данных?


 
{RASkov} ©   (2008-02-06 13:46) [5]

> [4] MZG   (06.02.08 13:38)

В TreeNode.Data будут лежать только ссылки(указатели) на СтрингЛисты, которые автоматом не сохраняются....
А листбокс тут вообще не причем.... он только визуализирует данные... конкретно стринглисты ссылки на которые находятся в TreeNode.Data


 
MZG   (2008-02-06 13:50) [6]

т.е. нужно необходимое количество стринглистов (заранее определенное), для каждого указателя? Я правильно понимаю?


 
{RASkov} ©   (2008-02-06 13:53) [7]

> [6] MZG   (06.02.08 13:50)

Ну в принципе верно... тыж в каждом итеме тривью хочешь дополнительную инфу, так ведь? Вот эта инфа будет в стринглистах... для каждого итема свой стринглист со своими строками....


 
MZG   (2008-02-06 13:55) [8]

Выходит, что для дальнейшей визуализации, необходимо сохранять стринлисты?


 
{RASkov} ©   (2008-02-06 13:57) [9]

> [8] MZG   (06.02.08 13:55)

Ну не сами стринглисты, а строки из них..... У стринглистов есть методы SaveTo(LoadFrom)File(),...
...так, на всякий случай :)
И при удалении Итема в ТриВью, нужно самим заботится об освобождении памяти...


 
{RASkov} ©   (2008-02-06 13:58) [10]

> И при удалении Итема в ТриВью, нужно самим заботится об
> освобождении памяти...

... занимаемой под стринглисты


 
MZG   (2008-02-06 14:04) [11]

Да-да, само-собой - освобождение памяти обязательно!
{RASkov} ты прям помогаешь думать, благодаря тебе мозги шевелятся!
Спасибо!
И ещё пара вопросов относительно темы.

1. Если количество стринглистов (или строк) быдет увеличиваться, то как правило, нужно отводить память для работы с ними, типа New() despore() ???

2. Предположим, что имеется некая структура дерева treeview и имеется некое количество stringlist-ов. Структура дерева и данные стринглистов также сохранены. После повторного запуска программы у меня все сохранится? Или для этого все же желательно реализовать запись иным способом. Например, в поток?


 
{RASkov} ©   (2008-02-06 14:21) [12]

> [11] MZG   (06.02.08 14:04)
> 1. Если количество стринглистов (или строк) быдет увеличиваться,
> то как правило, нужно отводить память для работы с ними,
> типа New() despore() ???

Никаких New !!! У тебя уже все реализовано в Data т.е. твой TreeNode.Data:=S это почти тоже самое что и TreeNode.Data:=TStringList.Create;
И потом почти работаешь так TreeNode.Data.Add(""); т.е. так TStrings(TreeNode.Data).Add("");

2 - все сам.... и сохранение и загрузку.... я же уже говорил об этом... Нет у тебя никаких дополнительных строк в TreeNode.DAta - там только указатель на них


 
{RASkov} ©   (2008-02-06 14:28) [13]

> [11] MZG   (06.02.08 14:04)
> Структура дерева и данные стринглистов также сохранены

А как они сохранены? Каким способом(методом, кодом)....


 
MZG   (2008-02-06 16:09) [14]

У меня что-то не получается:(

В рамках эксперимента скопировал код.
Ничего не получилось. компилятор указывает на ошибку
ListBox.Items.Assign(TStrings(TreeNode.Data));

У меня так:


var
Node: TTreeNode;
MyString: TStringList;

begin
MyString:=TStringList.create;
MyString.Add("New Str");
TreeView.Items.Add(nil "Item").Data:=MyString;
end;


далее щелчок на выбранном узле дерева...

ListBox.Items.Assign(TStrings(Node.Data));


В MyString добавлено 4 строки на каждый узел. При попытке выбрать узел появляется ошибка.

Подскажи пожалуйста, что не так делаю.


 
DVM ©   (2008-02-06 16:21) [15]


> MZG  

 ListBox1.Items.Assign(TStrings(TreeView1.Selected.Data));


 
MZG   (2008-02-06 17:01) [16]

Разобрался! :)
Большое спасибо всем!



Страницы: 1 вся ветка

Текущий архив: 2008.03.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
15-1201507817
Dennis I. Komarov
2008-01-28 11:10
2008.03.02
Asus P750 vs GloFish x800


15-1201444871
Черный Шаман
2008-01-27 17:41
2008.03.02
Delphi типы исключений.


3-1192105324
3Lander
2007-10-11 16:22
2008.03.02
Работает ли при "SQL dialect 3" оператор DISTINCT?


15-1201593227
GEN++
2008-01-29 10:53
2008.03.02
"Разыменование указателя"


2-1202475868
АИК
2008-02-08 16:04
2008.03.02
Undeclared identifier: CoTaskMemAlloc