Форум: "Основная";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
ВнизСвязь узлов 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c