| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как уничтожить объект в его же OnClick? |
| Автор: Гость_Андрей 17.2.2005, 15:38 |
| Выскакивает Access Violation, ну оно и понятно... Но всё-таки, должен же быть способ P.S. Если быть точным, то мне нужно в обработчике Button1.OnClick удалить собственника этой Button1, саму Button1, а также всех остальных потомков собственника Button1. |
| Автор: Rennigth 17.2.2005, 15:39 |
| можно удалять PostMessage |
| Автор: Гость_Андрей 17.2.2005, 16:15 |
| Если можно, чуть подробнее. В сообщениях я не шибко понимаю... |
| Автор: Girder 17.2.2005, 16:22 | ||
Брось на форму: TPanel, а на неё кнопку
PS: Если кнопка лежит на форме - то прибьется и форма |
| Автор: Гость_Андрей 17.2.2005, 16:47 |
| Спасибо, пойду попробую. Будут вопросы - еще напишу. |
| Автор: Гость_Андрей 17.2.2005, 17:14 |
| Приведенное решение действительно подходит для случая, когда есть панель, а на ней кнопка. Однако у меня ситуация такая: есть панель1, на ней n объектов лежат, есть панель2 (своего рода Caption для Panel1) (родитель у нее - также панель1), на панели2 есть кнопка. Нужно при нажатии на кнопку у ничтожить всё. Делаю так: procedure TGrCaption._OnCloseButtonClick (Sender: TObject); var f: TMessage; begin FillChar (f, SizeOf (f), #0); f.Msg:= WM_CLOSE; TComponent (Sender).GetParentComponent.Dispatch (f); TComponent (Sender).GetParentComponent.GetParentComponent.Dispatch (f); end; Эффект от этого следующий: 1) создаю программно всю свою байду (панели с объектами), нажимаю кнопку, всё пропадает. Прекрасно! 2) еще раз создаю программно такую же конструкцию, нажимаю кнопку, всё пропадает только при повторном нажатии на нее (первая панель как-то опять появилась под второй) создаю всю хитроумную панель GrBC так: begin GrBC:= TGrBasicComponent.Create (ModelScrollBox); AssignFile (f, (Sender as TRzGroupItem).Hint); Reset (f); GrBC.LoadData (f); GrBC.Left:= LeftPositionOnCreate; GrBC.Top:= TopPositionOnCreate; end; Сдается мне, ошибка где-то в обработке WM_CLOSE, что-то я неправильно вызываю. |
| Автор: December 17.2.2005, 21:12 |
| Можешь попробовать заюзать ApplicationEvents.OnIdle. |
| Автор: Girder 17.2.2005, 23:25 | ||||||||
Уничтожаем себя
Уничтож с "отцом"
Уничтожаем с "дедом"
PS: Если предок форма... то тут надо быть внимательным... так как форма не будет унижножена! Итого (для использования
|
| Автор: Гость_Андрей 18.2.2005, 06:54 |
| Girder, огромное тебе спасибо. Твой вариант работает! |