![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Связь узлов TTreeView с элементами IXMLDOMDocument
pyJIoH © (2006-06-09 14:39:00)В качестве парсера XML использую - DOM интерфейс IXMLDOMDocument2,
По его элементам рекурсивно строю дерево в TTreeView
Вопрос, как связать TreeNode узлы с конкретными элементами в интерфейсе
чтобы при обращении к этим узлам, я мог брать соответствующие данные.
Если хранить в TreeNode.Data указатель на элемент из XMLDOMDocument'a
как его потом юзать?
Сергей М. (2006-06-13 10:37:00) [1]
> Если я правильно понял, это из-за того,
> что счетчик ссылок у объекта не увеличивался
Правильно понял.
Можно было сделать проще:
XMLDOMNode._AddRef;
TreeNode.Data := Pointer(XMLDOMNode);
При этом при уничтожении TreeNode не забыть сделать
IUnknown(TreeNode.Data)._Release;
иначе сч-к ссылок не будет сбалансирован
pyJIoH (2006-06-13 10:32:00) [2]Спасибо за ответы
Вообщем по началу при создании узлов
я сохранял ссылку таким образом:
...
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 какой-нибудь уникальный иденификатор
чтобы не хранить ссылку на объект, и уже искать по нему?
Reindeer Moss Eater (2006-06-09 16:10:00) [3]указатель на весь интерфейс или на XMLDOMNode например?
Это уж как тебе приспичит. Пойнтер он и есть пойнтер. Указывать может на что угодно.
Сергей М. (2006-06-09 15:43:00) [4]
> Если хранить в TreeNode.Data указатель на элемент из XMLDOMDocument'a
> как его потом юзать?
IXMLDOM(TreeNode.Data).SomeMethod
pyJIoH (2006-06-09 15:39:00) [5]можно подробней?
указатель на весь интерфейс или на XMLDOMNode например?
не силен в этой теме пока
Reindeer Moss Eater (2006-06-09 15:16:00) [6]Юзать как указатель на интерфейс