|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.06.2012, 16:05 | #1 |
Форумчанин
Регистрация: 31.10.2008
Сообщений: 215
|
Owner и Parent в собственном компоненте.
Здравствуйте.
Пишу свой компонент, есть несколько вопросов. Допустим, код Код:
Собственно вопрос - как правильно? Чуть больше кода - Код:
[Ferox]
Последний раз редактировалось postal2; 20.06.2012 в 16:10. |
20.06.2012, 16:11 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Parent вы не задаете сами.
Owner берете из параметра конструктора. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
20.06.2012, 16:14 | #3 |
Форумчанин
Регистрация: 31.10.2008
Сообщений: 215
|
То есть Parent остаётся nil, я правильно понимаю?
Стоп стоп стоп.. а если TSomeClass - визуальный компонент, то нужно Parent в любом случае задавать. Иначе Image банально не отображается на нём. Далее, если я задаю функцию типа AddAnotherImage, которая добавляет ещё одну картинку на мой компонент - кого тогда ставить Owner'ом?
[Ferox]
Последний раз редактировалось postal2; 20.06.2012 в 16:18. |
20.06.2012, 16:20 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
20.06.2012, 16:30 | #5 |
Форумчанин
Регистрация: 31.10.2008
Сообщений: 215
|
С Destroy проходит, а вот на Create жалуется, что
[DCC Error] FileView.pas(42): E2170 Cannot override a non-virtual method На Free жаловалась так же. К списку вопросов - чем Free отличается от Destroy? Если мне не изменяет память, то Free просто проверяет не разрушен ли компонент и только после этого вызывает Destroy.
[Ferox]
|
20.06.2012, 16:54 | #6 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
free делает проверку на nil. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
20.06.2012, 16:59 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Как в TSomeAnotherClass прописан Create? И какой класс он наследует? Скорее всего в его конструкторе не стоит override
Free это деструктор. Вы удаляя вызовите Free, а он уже деструктор вызовет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
20.06.2012, 17:17 | #8 |
Форумчанин
Регистрация: 31.10.2008
Сообщений: 215
|
От TScrollBox, который в общем-то TComponent является.
Ну в общем-то я разобрался, спасибо большое за советы, впредь буду переопределять именно Destroy. p.s. ошибка оказалась в совершенно другой функции, которая отвечала за перераспределение объектов на экране.
[Ferox]
|
21.06.2012, 01:54 | #9 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
21.06.2012, 09:51 | #10 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Со вчерашнего дня думал, стоит ли написать, и всё же решил.
На мой взгляд вызывать SomeImage.Free; не нужно. Ведь задан владелец, в унаследованном деструкторе владелец чистит своих подопечных. Таким образом, думаю, получается дабл-free, ведь ссылка на подопечного ссылается на память, но вот объект из этой памяти уже почищен, и будет попытка обращения к адресу вмт (методу деструктора в вмт) уничтоженного объекта. Ошибка может оказаться незамеченной из-за особенности менеджера памяти дельфи, но когда-то будет и крешится с АВ |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Owner | Aleksey1989 | Помощь студентам | 1 | 13.10.2010 09:49 |
parent:: | stenl1 | PHP | 16 | 26.05.2010 12:29 |
Ошибка в собственном компоненте для D7 | apromix | Компоненты Delphi | 3 | 20.01.2010 00:47 |
У кого какая система хранения на собственном компе данных | grenles | Свободное общение | 31 | 25.10.2009 06:34 |
Self, Owner, Sender | Arkuz | Общие вопросы Delphi | 5 | 26.10.2008 00:00 |