| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблема с удалением контрола |
| Автор: Elfin 17.12.2005, 19:40 | ||
| Возникла проблема с реализацией игры "убери лишнее" . Условия моей программы такие: Разработать упрощенную версию игры «Убери лишнее»: на экране появляются объекты –рисунки, среди которых есть лишний. Необходимо указать его. Использовать динамическое создание объектов. Проблема в том что иногда после выбора нужной картинки вылетает сообщение об ошибке. Не могу найти ее причину. Подскажите в чем она может заключаться? Привожу код
|
| Автор: Zero 17.12.2005, 21:18 | ||
При выборе какой картинки, и какая ошибка вылетает? Лучше вставь всю папку с исходниками (без екзешника), а то не охота разбиратся во всём коде чтобы его откомпилить.(внизу есть кнопка Ответить, после нажатия на которую будет возможность вставлять файлы, Zip-архив) |
| Автор: Albinos_x 17.12.2005, 21:48 |
| 1. какое сообщение об ошибке? 2. в каком месте? |
| Автор: Elfin 18.12.2005, 10:27 |
| К сообщению прикрепил файл - архив с исходниками 22 кб. После нажатия на бутон1 происходит очищение панели1 от всех контролов а затем заполнение ее новыми контролами, среди которых один отличается от остальных картинкой и именем Targetб у остальных же имя 'IM'+порядковый номер картинки. При нажати на эту картинку с именем 'Target' она должна удалиться, иногда все нормально получается, а иногда происходит ошибка Acces Violation и код ошибки. |
| Автор: YurikGL 18.12.2005, 11:11 |
| Может я что не понимаю, но E.Name:='Target' Зачем так???? Создай массив Image-в и все будет хорошо.... А в Tag-e храни свое (i) Если уж очень нужно свою строку хранить, то создай наследника от TImige у которого есть нужное поле... А переименовывать объекты по ходу выполнения это как-то неправильно ИМХО.... А то в твоем случае реально существует только один объект Е и ты его много раз создаешь, меняешь имена, а ссылки на старые объекты теряешь... |
| Автор: Elfin 18.12.2005, 13:27 | ||||
Это как? что-то я не совсем понял. OK попробовал массив имагов, тоже не робит.
|
| Автор: Quadr0 18.12.2005, 13:44 |
| ... |
| Автор: Elfin 18.12.2005, 17:39 |
| Зачем из мухи делать слона? к чему такие навороты, если в теории алгоритм должен быть проще. Можно также по координатам вычислять в какую картинку я ткнул мышью, но стоит ли? Единственноен чего я не понимаю - это откуда ошибка, если теоретически все верно. |
| Автор: YurikGL 18.12.2005, 18:46 | ||
| Честно говоря, я так и не понял в чем прикол... Если Image создается методом "кидания на форму" то вызов free из OnClick этого компонента работает нормально... Вызов free из других объектов по отношению к динамически созданным Image тоже проходит нормально.... Из экспериментов выяснил, что ошибка возникает не всегда. Иногда это - abstract error иногда - AV.... Похоже на глюки самих делфей... С другими компонентами, кстати, та же фигня... А при использовании события OnExit (для TButton) все работает... Добавлено @ 18:53 В принципе, прблема решилась так:
т.е. вместо OnClick использовать OnMouseUp |
| Автор: Zero 18.12.2005, 18:58 | ||
Очень просто, я раньше на тотже кручёк раза три подряд ловился, а г-н Посол, меня всё время исправлял... Короче тут вся фишка в том, что при нажатии на картинку, она удаляет сама себя, что не разрешает ОС Winows, вот и выскакивает ошибка. Короче я чуть-чуть подправил, можешь посмотреть в прикреплённом файле. |
| Автор: YurikGL 18.12.2005, 19:05 | ||
Сами себе сообщение посылаете? Это, наверное, более правильное решение, чем мое... |
| Автор: p0s0l 18.12.2005, 22:30 | ||
|
| Автор: YurikGL 18.12.2005, 22:42 | ||
Хм.... а почему тогда иногда срабатывает без ошибок? |
| Автор: Elfin 19.12.2005, 04:00 |
| Zero YurikGL p0s0l Cпасибо огромное за разъяснения, очень благодарен за помощь, все работает. ZeroВсе работает, но этот код я не понимаю. Если не трудно, объясни как это работает. |
| Автор: Zero 19.12.2005, 14:43 | ||||||||||
Короче вся фишка в том, что при выполнении этой строки:
А в вот этой процедуре:
|