Granmer Цитата: почему это без ошибок работало в d2007 и с ошибкой в d2010?
У меня была подобная ситуевина, когда портировал одну библиотеку на d2009/d2010. Там тоже все было сложно закручено при разрушении объектов - объект, разрщаясь, разрушал другой объект, которым владел, а потом еще и обращался к его свойствам... В D2007 и ранее никогда ошибок не ворзникало, и поскольку последняя версия была под D5, то автор само собой ошибку не заметил. Однако в d2009/d2010 четко вылазил AV. Поборол путем пересмотра логики и изменения последовательности рузрушения объектов.
Вероятно, компилятор в Дельфи до 2009 не сильно следил за ссылками на разрушенные объекты и занимаемую ими при жизни память, и если сразу же после разрушения объекта память, занимая им еще не была распределена заново (фактически все данные разрушенного объекта еще по-прежнему оставались в памяти), то обращение к этой памяти по ссылке уже умервщленного объекта прокатывала.
В d2009/d2010 компилятор более тщательно следит за памятью и такой вольности не допускает.
Решение
Frodo_Torbins довольно симпатичное
Как вариант можно в обработчике нажатия кнопки, по которой вызывается с другой формы обработчик, удаляющий вызвавшую форму, первой строкой обнулить свойство OnMouseUP этой кнопки:
ButtonName.OnMouseUP:=nil;
а после этого - все остальное. Или (еще лучше) сделать это в обработчике OnMouseDown...
ЗЫ: И да, на Дельфи 2010 переходить надо - она очень вкусная