Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как хранить данные в TreeNode? [D7, XP]


M@G30 ©   (2010-03-19 10:15:00) 

Доброе утро, Мастера!
Я начинающий. Только учусь. Задача такая. Есть компонент TtreeView1 и memo1. Выбираем ветку Treenode, далее в memo1 записываем небольшой текст. Задача состоит в том, как записывать/считывать эти данные? Мне непонятно, как использовать метод Data? Мастера помогите пожалуйста разобраться. Спасибо!


KSergey   (2010-03-19 15:23:00) [1]

> M@G30   (19.03.10 12:32) [10]
> Нет. Нужно чтобы из файла брать.

В вопросе про файлы ни слова!

> которое хочу научить реализовать есть в системе 1С

Т.е. вы считаете, что я сейчас кинусь смотреть как тама дерево в 1С реализовано?! Низафто!

Постановка задачи, грамотная и понятная другим людям- 80% профессионализма.
Я к тому, что обращайте внимание на векторы развития. Добавлять строчки в Data - это фигня без умения формулировать свои мысли на бумаге.
За формулирование, к стати, и платят много больше (раза в 2..2,5 по моим наблюдениям).


MsGuns   (2010-03-19 15:09:00) [2]

а ИМХО этот код для примера начинающему вполне нормальный :)


MsGuns   (2010-03-19 15:07:00) [3]

Блин, на той железке, где я его набрал, и такой код - искусство :)


Медвежонок Пятачок   (2010-03-19 15:05:00) [4]

код юрского периода.
:)


MsGuns   (2010-03-19 15:03:00) [5]

Только не забывать главное:
В дереве не хранится никаких "посторонних" данных, а лишь ССЫЛКИ на них (св-во Data)
и всю ответственность за организацию, создание, заполнение и освобождение
собственно самих данных несет программный код, но не дерево.


MsGuns   (2010-03-19 15:00:00) [6]

PMyRec = ^RMyRec;
RMyRec = record
 S: string;
 SL: TStrings;
 i: integer;
 ed: TEdit;
 все-что-угодно
end;

var
 nd: TTreeNode;
 MyRec: PMyRec;
 ..
 nd := TreView.Items.Add(..);
 MyRec := NEW(PMyRec);  // Создать объект-структуру
 // Заполнить созданный объект
 with MyRec do
  begin
   s := 'Вася';  
   sl := TStringList.Create;
   ....
 end;
 nd.Data := MyRec;

Дальше в коде где надо по узлу вытащить данные
ShowMessage(PMyRec(TreeView1.Items[i].Data).s);
Memo1.Lines.Items.AddItems(PMyRec(TreeView1.Items[i].Data).sl);

Ну и при освобождении узлов не забывать dispose объекту и всем вложенным  в него
объектам, если они там имеются (в примере это стринглист)


Медвежонок Пятачок   (2010-03-19 12:42:00) [7]

еще лучше хранить все мамы и рамы внутри xml вместе с именами самих узлов.

тривию грузить из xml
в node.data хранить индекс (интегер) узла xml файла в котором лежит текст узла.


Медвежонок Пятачок   (2010-03-19 12:39:00) [8]

Node.Data := StrNew(PChar('Мама мыла раму'));

переходим на другой нод
Node.Data := StrNew(PChar('Мама мыла папу'));

переходим на другой нод
Node.Data := StrNew(PChar('Мама мыла маму'));

строковые литералы заменить на данные прочитанные из файла


Медвежонок Пятачок   (2010-03-19 12:34:00) [9]

Нет. Нужно чтобы из файла брать.

А с утра было из свойтсва Data. Теперь уже из файла


M@G30   (2010-03-19 12:32:00) [10]


> не, ему "тест" надо по-русски и с пробелом перед цифиркой

Не вижу ничего смешного :(


> procedure TreeView1OnChange(Sender: TObject; Node: TTreeNode);
>
> begin
>  if        Node.Index = 0 then Memo1.Lines.Text := 'test1'
>  else if Node.Index = 1 then Memo1.Lines.Text := 'test2'
>  else if Node.Index = 2 then Memo1.Lines.Text := 'test3';
>
> end;
>
> Так пойдет?


Нет. Нужно чтобы из файла брать. Что-то подобное, дерево которое хочу научить реализовать есть в системе 1С


Медвежонок Пятачок   (2010-03-19 12:19:00) [11]

не, ему "тест" надо по-русски и с пробелом перед цифиркой


KSergey   (2010-03-19 12:18:00) [12]

Создаем обработчик для события OnChange в TreeView
В нем пишем примерно так:

procedure TreeView1OnChange(Sender: TObject; Node: TTreeNode);
begin
 if        Node.Index = 0 then Memo1.Lines.Text := 'test1'
 else if Node.Index = 1 then Memo1.Lines.Text := 'test2'
 else if Node.Index = 2 then Memo1.Lines.Text := 'test3';
end;

Так пойдет?


Медвежонок Пятачок   (2010-03-19 12:11:00) [13]

Суть в том, что мне не понятно, как сохранить этот текст чтобы потом, вновь запустив программу

как это связано со свойством дата?
сохранишь в дата - и потом после запуска в дата ничего не будет.


M@G30   (2010-03-19 12:09:00) [14]

Хорошо, поставлю вопрос по-другому:
В TreeView1 есть такая структура:
Главная ветка
  ветка 1         - выбрали записали в мемо тест 1
  ветка 2         - выбрали записали в мемо тест 2
  ветка 3         - выбрали записали в мемо тест 3

Суть в том, что мне не понятно, как сохранить этот текст, чтобы потом, вновь запустив программу можно было выбрать например ветка 1,получить записанный текст в мемо1, т.е. получим тест1


KSergey   (2010-03-19 12:01:00) [15]

задачу я не понял.

> Выбираем ветку Treenode, далее в memo1 записываем небольшой текст. Задача состоит в том, как записывать/считывать эти данные?

Какие данные? откуда и куда??


M@G30   (2010-03-19 11:11:00) [16]

Ты не DevExpress используешь?
Нет. Делфи 7 и только.
Data - имелось в виду данные. Извиняюсь за оплошность....


Плохиш   (2010-03-19 11:03:00) [17]


> Мне непонятно, как использовать метод Data?

Запись Data := ...;
Чтение ... := Data;


evvcom   (2010-03-19 10:49:00) [18]

Добавить treeView1.Items.Add
Прочитать treeView1.Items[0]
Data - где такой метод? Ты не DevExpress используешь?


12   (2010-03-19 10:49:00) [19]

http://tinyurl.com/ybrae93


Наверх

Титульная страница Поиск, карта сайта Написать письмо