Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
15-1150545629
ОГО!!!
2006-06-17 16:00
2006.07.23
vs2005


2-1151690183
resuS
2006-06-30 21:56
2006.07.23
русский язык в консольном приложении


2-1152011001
Elfebet
2006-07-04 15:03
2006.07.23
Как узнать находится ли мышка на форма или нет?


3-1148369797
Андрей2005
2006-05-23 11:36
2006.07.23
Как обнулить автоинкрементное поле в таблице Paradox


15-1150194025
Crazy manager
2006-06-13 14:20
2006.07.23
Half-Life 2: Episode One




   Наверх