Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2016, 20:35   #1
bratcho
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 20
По умолчанию Владелец для компонента внутри класса

Пытаюсь создать TXMLDocument внутри метода собственного класса. Однако
при определении в качестве владельца класса TXMLDocument сам класс TXMLDocument (Self) возникает ошибка:
[DCC Error] TProjectUnit.pas(40): E2250 There is no overloaded version of 'Create' that can be called with these arguments

Кто сталкивался с таким, в чем может быть проблема?
bratcho вне форума Ответить с цитированием
Старый 20.10.2016, 01:57   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от bratcho Посмотреть сообщение
Пытаюсь создать TXMLDocument внутри метода собственного класса. Однако
при определении в качестве владельца класса TXMLDocument сам класс TXMLDocument (Self) возникает ошибка:
[DCC Error] TProjectUnit.pas(40): E2250 There is no overloaded version of 'Create' that can be called with these arguments

Кто сталкивался с таким, в чем может быть проблема?
Троешники и двоешники сталкивались и сталкиваются до сих пор. Не умея сравнить справку со своим кодом.
northener вне форума Ответить с цитированием
Старый 20.10.2016, 10:49   #3
bratcho
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 20
По умолчанию

Какая ссылка используется внутри метода главного класса при определении в качестве родителя этого главного класса для другого класса, создаваемого внутри его метода?

Главный класс - TProject.
Временно создаваемый класс внутри одного из методов - XML: TXMLDocument.
Почему временно?! - потому-что после получения данных из XML-фйла он мне не нужен, и делать его членом TProject не имеет смысла.
Проблема возникает внутри метода TProject, в котором я объявил и создал в качестве локальной переменной переменную XML класса TXMLDocument для считывания файла.
Код:
XML:=TXMLDocument.Create( XXX )
Проблема состоит в том, что задание в качестве владельца сам экземпляр класса (Self) внутри метода TProject не работает. Если проделать это внутри процедуры кнопки, то работает, а внутри какого-либо класса не работает. Выход нашел в том, что в качестве владельца задал Application, то есть приложение, в котором будет работать класс TProject. Но не смотря на то, что класс XML будет уничтожен по завершении метода TProject (так как он является локальной переменной внутри этого метода), концептуально мне кажется это не правильным, так как в качестве владельца если на то уж пошло необходимо назначать экземпляр TProject. Отсюда вопрос, какое имя зарезервировано под экземпляр класса (в данном случае TProject)?

Последний раз редактировалось bratcho; 20.10.2016 в 11:32.
bratcho вне форума Ответить с цитированием
Старый 20.10.2016, 12:43   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
x:=TXMLDocument.Create(nil); 
.......
x.Free; //FreeAndNil(x); //и не забывать о правиле хорошего тона
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.10.2016, 12:58   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

nil не съест, там наследник TComponent нужен. Так попробуй:
Код:
  TempParent:=TComponent.Create(nil);
  x:=TXMLDocument.Create(TempParent);
Или напрямую с c IXMLDOMDocument работать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.10.2016 в 13:01.
Аватар вне форума Ответить с цитированием
Старый 20.10.2016, 13:03   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

С чего вдруг не съест?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.10.2016, 13:05   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Борланд так сделал, для Д7 по крайней мере. С nil самоуничтожение
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.10.2016, 14:29   #8
bratcho
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 20
По умолчанию

Ребят спасибо!!!
Вариант
Код:
XML:=TXMLDocument.Create(nil)
так же как и
Код:
XML:=TXMLDocument.Create('путь к файлу')
вызывал зависание программы.

Работающий вариант
Код:
TempParent:=TComponent.Create(nil);
XML:=TXMLDocument.Create(TempParent);
Работаю в Delphi 2010
bratcho вне форума Ответить с цитированием
Старый 20.10.2016, 14:53   #9
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

а чего в справку то не заглянуть, как предлагали сразу? там же написано как надо
come-on вне форума Ответить с цитированием
Старый 20.10.2016, 16:59   #10
bratcho
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 20
По умолчанию

Тыкните носом в раздел справки пожалуйста )
bratcho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс внутри класса xxxkrikxxx Общие вопросы Delphi 7 28.07.2014 18:31
функции внутри класса... Muvvka C++ Builder 4 24.06.2013 20:58
Класс внутри класса Prontit Общие вопросы Delphi 16 07.10.2011 08:30
Сбой при получении производства объектов класса COM для компонента с CLSID Vistar Общие вопросы .NET 3 10.07.2011 23:31
Создать класс(компонент) внутри компонента Deight Общие вопросы Delphi 6 21.12.2008 09:26