Главная страница
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.016 c
14-60362
Viktor Kushnir
2003-06-01 18:57
2003.06.19
АХД и Финансовый анализ


4-60464
sosv
2003-04-17 14:06
2003.06.19
HWND


14-60360
LiLa Ananda
2003-06-02 09:55
2003.06.19
Пользуясь случаем обнаружения...


14-60331
Алексей
2003-06-01 21:43
2003.06.19
БД какая нибудь нужна срочно


8-60272
andwcomm
2003-03-05 14:30
2003.06.19
Уважаемые МАСТЕРА Как играть звук из *.wav файла даже если звуков