Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.19;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.017 c
1-60166
Navi
2003-05-31 08:03
2003.06.19
Перемещение курсора по сетке


3-60025
xmrz
2003-05-27 00:22
2003.06.19
Работаем с IB по сети


4-60453
Keksis
2003-04-18 15:58
2003.06.19
Полноэкранный режим


1-60110
Back
2003-06-06 10:48
2003.06.19
Как отобразить окно поверх всех окон всех работающих приложений


14-60363
Antonius
2003-06-02 16:07
2003.06.19
Господа, я существует фришный компонент Zip-совместимого архиви..