Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Destroy себя - ошибка!

54K
28 февраля 2010 года
e5620
5 / / 21.02.2010
Доброго времени,
Проблема заключается в следующем, пишу для себя компонент, Родителем является TsScrollBox, а дочерними TsPanel (со свойствами alTop).



Дочерние элементы создаю динамически, и присваиваются через "добавленную" к родителю функцию Add.

Ошибка заключается в следующем, в каждой строке имеется кнопка "Х" закрыть (удалить строку), При нажатии на нее вызывается встроенное событие doCloseClick, в котором выполняется Free;и переход в destructor:
 
Код:
DestroyComponents;
 FFileStream.Free;
 inherited Destroy;


после этого осуществляется возврат к концу doCloseClick и "[COLOR="Red"]ОШИБКА[/COLOR]" доступа к памяти по адресу 0х00000030.

Заметил что если удалить создание дочерних элементов, т.е. оставить только одну кнопку закрыть, то ошибки нету.
253
28 февраля 2010 года
Proger_XP
1.5K / / 07.08.2004
DestroyComponents наверняка вызывается из TComponent.Destroy.
Кстати, зачем inherited Destroy, а не просто Destroy? Вообще говоря, разрушать компонент, в его обработчике не очень хорошая идея, могут быть ошибки - проверь.
54K
28 февраля 2010 года
e5620
5 / / 21.02.2010
добавил вложение в котором урезаный пример данной проблемы, в примере использованы альфаскины http://alphaskins.com/index_rus.php
253
28 февраля 2010 года
Proger_XP
1.5K / / 07.08.2004
И всё же, нафиг ты вручную вызываешь DestroyComponents? Открой Classes.pas, строку 9757 - он уже вызывается из TComponent.Destroy. Так что в TTestItem.Destroy этого нет смысла делать.
54K
28 февраля 2010 года
e5620
5 / / 21.02.2010
Спасибо, проблема была именно в этом и вместо SendMessage - PostMessage.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог