Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
ВнизОшибка: "Cannot change visible in OnShow or OnHide" Найти похожие ветки
← →
И. Павел © (2010-07-16 11:19) [0]Здравствуйте.
У меня в обработчике формы OnShow возникает исключение. Его никто не перехватывает, и оно достигает процедуры Application.OnException (или обработчика ApplicationEvents.OnException – что одно и то же). OnException обрабатывает ошибку а потом пытается завершить программу через Halt:
procedure TE.OnE(Sender: TObject; E: Exception);
begin
try
…
except
end;
Halt;
end;
Но при этом генерируется ошибка: “Cannot change visible in OnShow or OnHide”. Но я ведь уже не в этих методах… Сгенерированная ошибка, видимо, отсылается в ExceptProc, показывается пользователю, и только потом программа завершается.
Подскажите, пожалуйста, как избежать такой проблемы при обработке ошибки от обработчика OnShow?
Сейчас пишу так:
procedure TE.OnE(Sender: TObject; E: Exception);
begin
try
…
except
end;
Application.Terminate;
Halt;
end;
Это работает (видимо, готовое завершиться, приложение не показывает ошибки).
ИМХО способ корявый. Может быть, есть лучше?
PS: может быть можно обойтись одним Application.Teminate? Как скоро он завершает программу? После его вызова из OnException может еще что-то выполниться: обработчик нажатия на кнопку, тик таймера и т.д?
Заранее спасибо.
← →
И. Павел © (2010-07-16 11:23) [1]А про тег "code" я и забыл... Извиняюсь.
← →
И. Павел © (2010-07-16 13:39) [2]Нашел решение:
ExitProcess(1);
← →
12 © (2010-07-16 14:25) [3]спасибо
а я как-то раз делал форму, которая первая вставала и по таймеру(или могла быть вызвана мессаджем) проверяла какая форма свое поле KillMe выставит в 1. Если форм больше не было - завершение.
но способ идиотский, потому и молчал
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c