Как в Делфи завершить приложение из середины процедуры? Это надо сделать при исключении. Сейчас сделано Application.Terminate. Это не подходит, т.к надо еще выгрузить длл. Заменить на raise и т.д.? Если ставлю MainForm.Close, то потом процедура продолжается.
Здравствуйте, OdesitVadim, Вы писали:
OV>Здравствуйте, demidov2, Вы писали:
D>>Если ставлю MainForm.Close, то потом процедура продолжается.
OV>а если слудующей строкой добавить exit? это даст выход с процедуры.
Спасибо. Да, это выход, но в проге ОЧЕНЬ много таких кусков и заменять одну строку на две долго. Часто надо будет begin — end вставлять.
Re[2]: Как в Делфи завершить приложение из середины процедур
Здравствуйте, demidov2, Вы писали:
D>Здравствуйте, OdesitVadim, Вы писали:
OV>>Здравствуйте, demidov2, Вы писали:
D>>>Если ставлю MainForm.Close, то потом процедура продолжается.
OV>>а если слудующей строкой добавить exit? это даст выход с процедуры.
D>Спасибо. Да, это выход, но в проге ОЧЕНЬ много таких кусков и заменять одну строку на две долго. Часто надо будет begin — end вставлять.
можно и по другому. Генерить ошибку с помощью Raise.
А также поставить на форму ApplicationEvents (Additional) и там перехватывать. Только для полного счастья можно генерить не обычное исключение, а наследоваться.
type EMyExc = EExcepion;
...
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
if e is EMyExc then halt;//ну можно и не так жестоко выходитьend;
потом можно и фильтровать свои
... << RSDN@Home 1.2.0 alpha rev. 745>>
Re[3]: Как в Делфи завершить приложение из середины процедур
Здравствуйте, demidov2, Вы писали:
D>Чего же Борланд OnTerminate для Application не сделал?!
А нафига оно, если есть OnMessage, в котором можно обработать WM_QUIT? Я задал себе этот вопрос и полез экспериментировать. Оказалось, что WM_QUIT в OnMessage не ловится (и я, кажется, понял почему).
Если честно мне кажется, что обрабатывать экстренное завершение надо перед вызовом Application.Terminate или вообще плюнуть на такую обработку, понадеявшись на нормальное завершение с очисткой используемых ресурсов самой средой выполнения.
... << RSDN@Home 1.2.0 alpha rev. 756>>
Re: Как в Делфи завершить приложение из середины процедуры?
Здравствуйте, demidov2, Вы писали:
D>Как в Делфи завершить приложение из середины процедуры? Это надо сделать при исключении. Сейчас сделано Application.Terminate. Это не подходит, т.к надо еще выгрузить длл. Заменить на raise и т.д.? Если ставлю
Не очень понятно, чем не подходит, и что препятствует выгрузке длл.
Это ж не TerminateProcess
Но, если очень хочется, можно использовать AddTerminateProc —
они выполняются до обработки WM_QUIT.
--
С уважением, LVT
Re[4]: Как в Делфи завершить приложение из середины процедур
Здравствуйте, SeLarin, Вы писали:
SL>А нафига оно, если есть OnMessage, в котором можно обработать WM_QUIT? Я задал себе этот вопрос и полез экспериментировать. Оказалось, что WM_QUIT в OnMessage не ловится (и я, кажется, понял почему).
А чего там может показаться, см. Forms.pas TApplication.ProcessMessage
if Msg.Message <> WM_QUIT then
begin
Handled := False;
if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
--
С уважением, LVT
Re[5]: Как в Делфи завершить приложение из середины процедур
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>А чего там может показаться, см. Forms.pas TApplication.ProcessMessage
Ну да, я так и подумал. Просто в исходники VCL было лень залезать.
... << RSDN@Home 1.2.0 alpha rev. 756>>
Re: Как в Делфи завершить приложение из середины процедуры?