![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как хранить данные в 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