| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как реализовать самоуничтожение компонента? |
| Автор: Zavlab 28.12.2009, 21:11 | ||
| Здравствуйте. Приплыл в своём программировании в тупик. Получается, что компонент формы должен сам себя уничтожить. На первый раз проносит(имею ввиду цикл разрушения-создания), а дальше ошибки появляются. Самые информативные такие: "Abstract error" и "Invalid pointer operation". А дальше прогу вообще выключить нельзя нормальными способами. Что ещё я обнаружил так это то, что после срабатывания метода free указатель на компоненту (Element:TControl;) равен не nil (как до создания пользуясь Create), а некоему ([csInheritable]). Это значение показывает Watch. В самом методе (Sender-ом, к примеру, является кнопка) всё происходит без Исключений, но как только дело доходит за последний end этого метода, тут же и сообщение об ошибке. Если этот же метод будет исполняться с Sender-ом в виде Form1 или другого компонента, который не подлежит удалению, то метод отрабатывается хорошо и после него тоже всё хорошо. Получается нужен кто-то ктобы потом позже произвёл удаление ненужного компонента. Думал реализовать это через сообщения, но методы Perform или WndProc работают как подпроцедуры, что совсем не подходит. Есть ли какие-либо другие способы устранить проблему. Вариант через timer оставлю как самый последний. Для наглядности приведу суть метода:
Можно и без метода FormInitialization. Грабли те же. |
| Автор: DarkProg 28.12.2009, 21:58 | ||||||
| Кажется это уже обсуждалось ранее, ну да ладно Я тут что вижу ты связываешь массив компонентов с реальными компонентами, а что если попробовать так
А ещё предлагали вариант, я правда сам не пробовал
или так
|
| Автор: kami 28.12.2009, 21:58 |
| Чуть пропиарю себя, любимого http://forum.vingrad.ru/index.php?showtopic=253299&view=findpost&p=1826869 |
| Автор: Zavlab 28.12.2009, 23:31 |
| Спасибо! "То что доктор приписал". |