![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Mina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 11.11.2005 Репутация: нет Всего: нет |
Кнопки создаются в Run-time.
Если возможно, то как удалить кнопки, при нажатии на них самих. Вот код
Что написать в обработчике события кнопки |
|||
|
||||
| Romkin |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: 2 Всего: 5 |
Послать сообщение форме с просьбой удалить self. Смотри TForm.Release. Просто делать self.Free крайне не рекомендую.
|
|||
|
||||
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Можно сделать так
НО, удалять можно будет только в том порядке в котором создавались кнопки... И вообще не рекамендую Это сообщение отредактировал(а) WaReZMEN - 26.11.2007, 13:24 |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Удалить корректно сможет только зачистчик Windows после закрытия программы. Так что я бы рекомендовал просто "скрыть".
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
самое верное из всех приведенных решение имхо. как-то так:
Это сообщение отредактировал(а) MetalFan - 26.11.2007, 15:33 -------------------- There are always someone smarter than you... |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Ага, и словить при этом в большой долей вероятности AV или abstract error, или еще что похуже!! -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Lexicss |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 16.8.2006 Где: Беларусь, Минск Репутация: нет Всего: 1 |
Фактически можно сделать так:
Делфи в данный момент никаких ошибок не выдаёт, но теоритически это неправильно, по крайней мере в документации написано, что так делать не рекомендуются - выполнять уничтожение кнопки из события вызванного по её нажатию. Более красивый вариант предложен от MetalFan. Только позволю себе заметить, что правильнее будет указать в обработчике код TObject( AMsg.WParam ).Free; (а не LParam) --------------------
Бери от жизни всё. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Lexicss, да знаешь ли... взял за правило примеры с ошибочками приводить, чтобы головой думали))))
но здесь реально перепутал, ибо писал на коленке без проверки в IDE -------------------- There are always someone smarter than you... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Никаких проблем не должно быть при простом банальном удалении.
См код.
Все компоненты удаляют себя у родителей. Глюки в чем-то другом. Добавлено через 2 минуты и 25 секунд p.s. пример из первого поста отлично работает. Добавлено через 14 минут и 20 секунд На всякий случай проверил нет ли обращений к полям данных после вызова обработчика OnClick. Действительно нет никаких обращений, вполне допустимые действия. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Проблемы будут не из-за какого-то неправильного дестроя,а в ситуации например такой(код вымышленный):
Что произойдет одному всевышнему известно. Проблемма не в том что именно для кнопки это прокатывает, а в том что мы не знаем, есть ли обращения к полям/методам класса после его разрушения или нет. Это априори опасно!!! -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Для того и учатся правильно писать код. Не писать же код с поправкой на дурака -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Romkin |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: 2 Всего: 5 |
TComponent - далеко. TWinControl - оно ближе. А там окно.
Хотя такое выглядит допустимым, но я не уверен. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Детишок контролы определяют как TComponent, потому нужный код следовало искать именно там, а TWinControl как TWinControl у него свой деструктор уничтожающий окно, только и всего. Многие сообщения реализуются именно в TComponent благодаря VCL. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
ню незнаю... имхо на vcl надейся а сам не плошай! -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Rennigth, я уж привык, что логичные вещи в VCL работают так как этого хочеться.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |