Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.014 c
2-1151942665
hgd
2006-07-03 20:04
2006.07.23
SavetoJPEG для GRAPHICS32


15-1150912243
X9
2006-06-21 21:50
2006.07.23
Вызов подключения к Интернет по сети


15-1151360686
фывсссяч
2006-06-27 02:24
2006.07.23
English


3-1147876311
S@shka
2006-05-17 18:31
2006.07.23
Сбросить данные из таблицы в файл.


15-1151307292
worldmen
2006-06-26 11:34
2006.07.23
Excel. Программно окрасить ячейки.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский