Форум: "Основная";
Текущий архив: 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