Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Связь узлов TTreeView с элементами IXMLDOMDocument   Найти похожие ветки 

 
pyJIoH ©   (2006-06-09 14:39) [0]

В качестве парсера XML использую - DOM интерфейс IXMLDOMDocument2,
По его элементам рекурсивно строю дерево в TTreeView

Вопрос, как связать TreeNode узлы с конкретными элементами в интерфейсе
чтобы при обращении к этим узлам, я мог брать соответствующие данные.

Если хранить в TreeNode.Data указатель на элемент из XMLDOMDocument"a
как его потом юзать?


 
Reindeer Moss Eater ©   (2006-06-09 15:16) [1]

Юзать как указатель на интерфейс


 
pyJIoH ©   (2006-06-09 15:39) [2]

можно подробней?
указатель на весь интерфейс или на XMLDOMNode например?
не силен в этой теме пока


 
Сергей М. ©   (2006-06-09 15:43) [3]


> Если хранить в TreeNode.Data указатель на элемент из XMLDOMDocument"a
> как его потом юзать?


IXMLDOM(TreeNode.Data).SomeMethod


 
Reindeer Moss Eater ©   (2006-06-09 16:10) [4]

указатель на весь интерфейс или на XMLDOMNode например?

Это уж как тебе приспичит. Пойнтер он и есть пойнтер. Указывать может на что угодно.


 
pyJIoH ©   (2006-06-13 10:32) [5]

Спасибо за ответы

Вообщем по началу при создании узлов
я сохранял ссылку таким образом:
...
 TreeNode.Data := Pointer(XMLDOMNode);
...

Но при попытке вызвать в событии OnChange
моего TreeView:
...
IXMLDOMNode(Node.Data).SomeMethod получал AV.
...

Если я правильно понял, это из-за того,
что счетчик ссылок у объекта не увеличивался

Сейчас я накидал такой код:
type
 PXMLNodeInfo = ^TXMLNodeInfo;
 TXMLNodeInfo = record
   DOMNode: IXMLDOMNode
 end;
...
 NodeInfo^.DOMNode := XMLDOMNode;
 TreeNode.Data := NodeInfo;
...
procedure OnChange();
begin
 PXMLNodeInfo(Node.Data)^.DOMNode.SomeMethod;
end;

Все работает.

Еще пару вопросов:
Не происходит ли в интерфейсе
каких либо непредвиденных изменений информации?
точнее код выше работоспособен на 100%?

Есть ли у IXMLDOMNode какой-нибудь уникальный иденификатор
чтобы не хранить ссылку на объект, и уже искать по нему?


 
Сергей М. ©   (2006-06-13 10:37) [6]


> Если я правильно понял, это из-за того,
> что счетчик ссылок у объекта не увеличивался


Правильно понял.

Можно было сделать проще:

XMLDOMNode._AddRef;
TreeNode.Data := Pointer(XMLDOMNode);

При этом при уничтожении TreeNode не забыть сделать

IUnknown(TreeNode.Data)._Release;

иначе сч-к ссылок не будет сбалансирован



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

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

Наверх




Память: 0.48 MB
Время: 0.058 c
15-1150891658
Desdechado
2006-06-21 16:07
2006.07.23
Распродажа книг издательством "Питер"


2-1151256162
Юнкер
2006-06-25 21:22
2006.07.23
try except как способ выбора


1-1149794468
GanibalLector
2006-06-08 23:21
2006.07.23
Интерфейсы...


9-1132266433
Кефир87
2005-11-18 01:27
2006.07.23
Рендер в текстуру получается кривой!


15-1150734006
Ketmar
2006-06-19 20:20
2006.07.23
профессиональная деформация...