Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамическое создание компонента TXMLDocument / 6 сообщений из 6, страница 1 из 1
22.01.2020, 15:49
    #39917383
Stalker4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое создание компонента TXMLDocument
Hi All,

Delphi 10.3.3

Если кинуть на форму компонент TXMLDocument и в коде, скажем при нажатии кнопки, прописать обработчик
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
 iRootNode :IXMLNode;

begin
 XMLDocument1.Active := False;
 XMLDocument1.XML.Text := <мой XML>;
 XMLDocument1.Active := True;
 iRootNode := XMLDocument1.DocumentElement;
end;

то вызов XMLDocument1.DocumentElement срабатывает нормально, и я получаю корневую ноду.

А если в этой же форме на другую кнопку прописать динамическое создание TXMLDocument
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
 iRootNode :IXMLNode;
 oXMLDocument :TXMLDocument;

begin
 oXMLDocument := TXMLDocument.Create(nil);
 oXMLDocument.DOMVendor := GetDOMVendor('MSXML');
 oXMLDocument.Active := False;
 oXMLDocument.XML.Text := <мой XML>;
 oXMLDocument.Active := True;
 iRootNode := oXMLDocument.DocumentElement;
end;

То во время обращения к oXMLDocument.DocumentElement я получаю ошибку
"Invalid pointer operation".

Не могу понять, что я делаю не правильно.
...
Рейтинг: 0 / 0
22.01.2020, 15:53
    #39917389
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое создание компонента TXMLDocument
во-первых,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
 iRootNode :IXMLNode;
 oXMLDocument :IXMLDocument;

begin
 oXMLDocument := TXMLDocument.Create(nil);
 oXMLDocument.DOMVendor := GetDOMVendor('MSXML');
 oXMLDocument.Active := False;
 oXMLDocument.XML.Text := <мой XML>;
 oXMLDocument.Active := True;
 iRootNode := oXMLDocument.DocumentElement;
end;
...
Рейтинг: 0 / 0
22.01.2020, 16:11
    #39917414
Stalker4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое создание компонента TXMLDocument
Квейд,

Да, так работает, Большое спасибо .

Хотя и не совсем понятно. Ведь когда кидаешь компонент на форму, он в объявлении пишется
как XMLDocument1: TXMLDocument; т.е. как класс, а не как интерфейс.

Хотя даже в моем коде, если заменить
oXMLDocument := TXMLDocument.Create(nil)
на
oXMLDocument := TXMLDocument.Create(Self)
то тоже ошибки не будет.

Квейд
во-первых,

В моем коде еще где то ошибка ?
...
Рейтинг: 0 / 0
22.01.2020, 16:26
    #39917433
Stalker4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое создание компонента TXMLDocument
Квейд
во-первых,
Код: pascal
1.
2.
var
 oXMLDocument :IXMLDocument;

А как В этом случае освобождать память от oXMLDocument ? Или теперь это не надо ?
...
Рейтинг: 0 / 0
22.01.2020, 16:28
    #39917435
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое создание компонента TXMLDocument
это не объект чтоб
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.01.2020, 16:38
    #39917446
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое создание компонента TXMLDocument
Stalker4
Квейд,

Да, так работает, Большое спасибо .

Хотя и не совсем понятно. Ведь когда кидаешь компонент на форму, он в объявлении пишется
как XMLDocument1: TXMLDocument; т.е. как класс, а не как интерфейс.
...

Это, кстати, документировано (хотя я когда-то кажется тоже нарвался на вот такое же, как вы).
ЭмбаркадероWhen TXMLDocument is created without an Owner, it behaves like an interfaced object. That is, when all references to its interface are released, the TXMLDocument instance is automatically freed. When TXMLDocument is created with an Owner, however, it behaves like any other component, and is freed by its Owner. When you add a TXMLDocument component from the component palette to a form or data module, it is automatically created with an Owner. When the TXMLDocument component is created using the global LoadXMLDocument function (or by a function that the XML Data Binding wizard generates to return the root node of the document), the function creates a TXMLDocument instance without an Owner.
http://docwiki.embarcadero.com/Libraries/XE3/en/Xml.XMLDoc.TXMLDocument
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамическое создание компонента TXMLDocument / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]