Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-60327
Карлсон
2003-06-01 16:21
2003.06.19
чистящие средства.


1-60170
deedlit
2003-06-06 15:19
2003.06.19
Оскомина работы с эксплорером...


1-60187
aleman
2003-06-05 10:05
2003.06.19
Как закрасить сектор круга?


9-60007
Tankist
2002-12-12 11:48
2003.06.19
из точку в точку по прямой.


14-60423
Dr. Acid
2003-06-03 16:28
2003.06.19
Где взять Async Pro





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский