![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| CrazyPiggy |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Доброй ночи! У меня тут возникла следующая проблема. В базе хранятся Наименования меню. По ним я на панели TPanel динамически создаю кнопки TButton, каждой кнопке присваиваю Tag для привязки к определенному ID меню. После нажатия какой либо Button необходимо удалить все кнопки на панели которые я создал ранее и продолжить выполнение программы. Но уменя проблема
Делаю следующее
вылетает ошибка. Я так понимаю что кнопка сама себя не может удалить. Как же мне быть. Ведь мне нужно очистить память от неё. Может чтото посоветуете? Заранее спасибо.
|
||||
|
|||||
| Демо |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
При нажатии на кнопку отправляй окну(форме) сообщение PostMessage, в обработчике удаляй кнопку.
-------------------- |
||||
|
|||||
| CrazyPiggy |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Чтото у меня не получается. Все равно дает ошибку. Может вы мне подскажете как правильно сделать.
Дело в том что мне необходимо на панели создавать различные кнопки или писать тескт взависимости от данных в базе. в примере выше я пытаюсь их создать динамически, но потом мне, после нажатия кнопки необходимо опять освободить панель и на ней заново перерисовать или кнопки или текст. Может подскажете алгоритм, вроде я все правильно делаю. Создал обработчик нажатия, при создании кнопки на клик присваиваю этот обработчик
Затем в обработчике
присваиваю панели Tag кнопки и из базы выбираю по этому tag данные. А вот удалить предыдущие не могу. Все время вываливается ошибка Abstract Error. Удалить кнопки пытаюсь след. образом
Просто на панели у меня могут быть не только кнопки, но и Мемо или Edit; Это сообщение отредактировал(а) CrazyPiggy - 23.11.2009, 13:09 |
||||||
|
|||||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Надо проверять, кнопка ли данный контрол. Попробуй так:
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| CrazyPiggy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Смысл не в том кнопка ли это или нет. Просто не могу очистить панель от всех контролов. Попытался метод ClearPanel реализовать через PostMessage, таже ошибка.
|
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
-------------------- |
|||
|
||||
| CrazyPiggy |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Да, всегда 0. А иначе все не удалятся. Пробовал ставить k вместо ноля удаляет через одну. Но все это
прекрасно работает если поставить в обработчик нажатия на саму панель, т.к. я её не удаляю, а вот при попытки кнопки удалить саму себя не выходит. Можеь есть другой выход? Это сообщение отредактировал(а) CrazyPiggy - 23.11.2009, 13:38 |
||||
|
|||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Если удалять в цикле for, то желательно бы использовать downto, тогда с индексами все будет нормально.
При нажатии на кнопку (из вашего кода) получается, что в обработчике OnClick кнопки вы пытаетесь удалить эту самую кнопку (вкупе с другими компонентами). Забыв о том, что после обработки назначенного вами OnClick выполняются и другие действия, непосредственно затрагивающие поля УЖЕ УДАЛЕННОЙ кнопки. Отсюда и исключение. Выход - вызывать ClearPanel через событие, как и сказал (более того - показал, как) Демо. Адаптировать его код из уничтожения кнопки под ваши нужды (т.е. вызову ClearPanel) - imho, труда не представляет. Это сообщение отредактировал(а) kami - 23.11.2009, 13:47 |
|||
|
||||
| Демо |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
Прекрасно работает. Значит проблема в другом. Поставь точку останова и пройдись отладчиком. В каком месте кода происходиь ошибка? Добавлено через 5 минут и 20 секунд
И даже так всё работает:
Это сообщение отредактировал(а) Демо - 23.11.2009, 13:58 -------------------- |
||||||||
|
|||||||||
| CrazyPiggy |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Извините, может я "туплю", но я создал заново программу только по вашему примеру. Все нормально, но как доходит очередь до удаления самой кнопки опять вылетает ошибка. Не понимаю что я делаю не так. У вас этот пример работает? Да ещё заметил, если нажать на 1 и 3 все прекрасно работает а вот 0 и 2 выдают ошибку Это сообщение отредактировал(а) CrazyPiggy - 23.11.2009, 14:26 |
||||
|
|||||
| Демо |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
Действительно. Не учёл всего.
Вот должна работать такая процедура:
Добавлено через 1 минуту и 39 секунд И даже вот так:
-------------------- |
||||
|
|||||
| CrazyPiggy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Демо большое спасибо. Все вроде работает
|
|||
|
||||
![]()
|
| Правила форума "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. |