Вниз
Скачать: CL | DM;

TTreeNode   Найти похожие ветки 

← →
Rel_   (2003-06-05 15:12) [0]

Всем привет!!!
Если не трудно, подскажите алгоритмик.
Есть node: TTreeNode. У него может быть 1-2 уровня вложенности.

У самого node - поле Data - указатель на структуру, например некий record.
Например
type Ta = record
b,c, .. integer;
e,f, .. TList !!!
end;
Кроме того, у каждого из Items-ов энтого node также поле Data ссылается на такую же структуру.

Как мне получить копию энтого node (node2). Причём, node2.Data должны содержать свои собственные адреса, а не адреса node.data и node2.items[i].data <> node.items[i].data .

Не охото всё делать руками: выделять память для каждого нового
node2.items[i].data, разыменовывать указатели, присваивать.
Или если руками - то как грамотнее и попроще.

Если я напишу сл:
node2 := TTreeNode.Create(nil);
node2 := node, я ведь просто присвою адрес об-та node1 об-ту node2. Изменяя любые поля Ta(node2.items[i].data^).b, я односременно буду изменять Ta(node.items[i].data^).b


← →
Skier ©   (2003-06-05 15:16) [1]


> Не охото всё делать руками: выделять память для каждого
> нового
> node2.items[i].data, разыменовывать указатели, присваивать.

А придётся !


← →
Rel_   (2003-06-05 15:22) [2]

Хе-Хе энто я знаю, но может что проще придумаешь ?
Просто надо создать копию TTreeNode со всеми вложениями и энта копия должна занимать абсолютно новую область памяти, никоем образом не перекрывающуюся с исходной.

Нужно для сл: редактирую данные по указателю data - использую диалоговое окно. B случае modalresut=mrCancel - должен быть откат . Вот я и хочу создать копию данных по указателю data и самой ноды и всех её вложений.

Может кто подкинет более грамотную идейку!!!


← →
ladybird   (2003-06-05 15:22) [3]

Node1.Assign(node2);
но прочитайте Help по TTreeNode.Assign(...);


← →
Skier ©   (2003-06-05 15:24) [4]

>ladybird (05.06.03 15:22)
И что ? Assign "правильно" будет работать c TTreeNode.Data ?


← →
Rel_   (2003-06-05 15:33) [5]

to skier - вот и я подозреваю, что Node1.Assign(node2) то же самое, что и node1=node2


← →
ladybird   (2003-06-05 15:36) [6]

> Skier © (05.06.03 15:24)
Нет, конечно, я же написал про Help
Но хоть что-то он скопирует :)), а это лучше, чем node1 := node2 :))


← →
Skier ©   (2003-06-05 15:36) [7]

>Rel_ (05.06.03 15:33)
Напиши процедурку али функцию (это как душе угодно...)
что-то типа этого

procedure CopyNodeData(const ADstNode, ASrcNode : TTreeNode);
begin
//здесь код копирования твоих данных...
end;

Потом по необходимости вызывай CopyNodeData. Делов-то ! :)


← →
ladybird   (2003-06-05 15:45) [8]

Rel_

> Нужно для сл: редактирую данные по указателю data - использую
> диалоговое окно. B случае modalresut=mrCancel - должен быть
> откат

А нельзя записывать ВСЕ из формы в "Data" только в случае ModalResult = mrOK?


← →
Rel_   (2003-06-05 15:54) [9]

Да можно конечно, только хотелось именно таким образом. Чтобы всё хранилось в полях редактирования и гридах, а именно в переменной имеющей определённую структуру.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.014 c
4-60470
fifo
2003-04-19 19:03
2003.06.19
Проблема с Отсылкой нажатий клавиш другой программе


14-60326
Дмитрий К.К.
2003-06-04 06:13
2003.06.19
Именинники 4 июня


1-60158
Jeka.
2003-06-06 08:00
2003.06.19
Закрытие файла


1-60152
Z_man7777
2003-06-06 17:33
2003.06.19
Как вытащить текущий год?


14-60323
Лёлик
2003-06-04 00:36
2003.06.19
Crystal Enterprise




   Наверх