AV при закрытии MainForm

Док
Дата: 12.10.2006 09:20:29
D7/чайник

При закрытии главного окна кнопкой TollBar'а или Button'ом прога завершается корректно. Стоит только закрыть ее кнопкой с крестиком (верхний правый угол окна), вываливается AV (см.рисунок).

Навскидку, где мог напортачить? Куда копать?

Док.
RENaissance
Дата: 12.10.2006 09:22:40

Код закрытия формы какой?


Posted via ActualForum NNTP Server 1.3

Док
Дата: 12.10.2006 09:31:15
RENaissance

Код закрытия формы какой?
Posted via ActualForum NNTP Server 1.3


//выход их программы
procedure TFrmMainProg.ActExitProgramExecute(Sender: TObject);
begin
Application.Terminate;
{FrmMainProg.Close;}//результат тот же
end;

В событии баттонов прописан вызов эвента меню.

В OnClose и OnDestroy ничего нет. Форма автокритная + DataModule выставлен в autocreate. Остальные формы, вызываемые из нее - availabel.
RENaissance
Дата: 12.10.2006 09:41:03

ActExitProgram - это Action? В нем AV выскакивает? И если Action, то к чему привязан?


Posted via ActualForum NNTP Server 1.3

Андрей Спильный
Дата: 12.10.2006 09:43:03
Док
D7/чайник

При закрытии главного окна кнопкой TollBar'а или Button'ом прога завершается корректно. Стоит только закрыть ее кнопкой с крестиком (верхний правый угол окна), вываливается AV (см.рисунок).

Навскидку, где мог напортачить? Куда копать?

Док.


когда вы все научитесь пользоваться отладчиком?

1.отключить оптимизацию
2. включить дебуг дцу
3. смотреть на источник ошибки, и на стек
4. думать немного

наверняка у вас попытка вызова метода уже освобожденного объекта (например еще раз делаете фри ему)


зы
а вообще, такого рода вопрос стоит сопровождать или полным кодом проекта в архиве, или в этом частном случае содержимым .dpr, секцией interface главной формы, содержимым onCreate, onDestroy, onClose а также (если есть) initialization/finalization, ну и конечно обработчика этой кнопки

ззы
сам по себе терминейт, который вы соизволили привести, не может являться источником ошибки
Anatoly Podgoretsky
Дата: 12.10.2006 14:33:11
Док
В OnClose и OnDestroy ничего нет. Форма автокритная + DataModule выставлен в autocreate. Остальные формы, вызываемые из нее - availabel.

У формы гораздо больше обработчиков, кроме того у каждого компонента лежащем на форме то же есть свои обработчики, это не считая внешних библиотек.
Закрытие крестиком и по клавише вызывают разные обработчики.
Док
Дата: 12.10.2006 14:59:16
Anatoly Podgoretsky
Закрытие крестиком и по клавише вызывают разные обработчики.

Это первое, что мне пришло на ум, когда AV стало вылезать только при нажатии на крестик. Самое интересное, если перед закрытием формы я все-таки коннектился к БД диалогом, то последующее нажатие любой кнопки исключения уже не вызывало.

Слава Богу, посидев и подумав, ЧТО я поменял в проекте за последние сутки (а до этого ошибка не вылезала), удалось найти ее причину:

Андрей Спильный
наверняка у вас попытка вызова метода уже освобожденного объекта (например еще раз делаете фри ему)

Андрей, Вы оказались правы. Поначалу в одной из форм (создаваемой в RunTime) в результате отработки диалога создавалась в RunTime еще одна временная форма c промежуточными данными. Код изменился и потребность в этой форме отпала, а "мусор" со ссылкой на нее остался. При явном вызове метода OnClose или Terminate все прокатывало (вот оно - "...Закрытие крестиком и по клавише вызывают разные обработчики ..."), "крестик" же вызвал этот сабж.
Полечилось все очень просто, скидыванием в новый каталог "нужных" модулей и включением в проект их заново.

Спасибо всем за помощь и советы.

===
Док.