Главная страница
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.028 c
15-1150877404
ANB
2006-06-21 12:10
2006.07.23
Алгоритмы проверки ИНН и номера ПФР


3-1147932661
petvv
2006-05-18 10:11
2006.07.23
Трабла с FastReport 3


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


15-1150450044
MBo
2006-06-16 13:27
2006.07.23
Пятничные задачки для brain разминки ;)


1-1149598180
newby
2006-06-06 16:49
2006.07.23
Шрифт по умолчанию в создаваемых формах