Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
ВнизОтловить закрытие приложения Найти похожие ветки
← →
Gu (2011-09-13 02:07) [0]Есть вот такой dpr
Program My;
uses
MyUnit,
Forms,
Unit1 in "Unit1.pas" {Form1};
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
// !!!
end.
и юнит, который первым инициализируетсяUnit MyUnit; Interface
Uses Forms,Windows,Sysutils,...
...
Procedure ProcBegin;
Procedure ProcEnd;
Implementation
...
Procedure ProcBegin;
begin
...
end;
Procedure ProcEnd;
begin
...
end;
Initialization
ProcBegin;
Finalization
ProcEnd;
end.
Вопрос: как в юните myunit отловить для application событие разрушения или выхода? Т.е. он инициализируется первым и выполняет процедуру ProcBegin, затем инициализируется Application в dpr, после того как приложение закрывают я так понимаю что происходит Application.terminate (в месте //!!!), затем происходит финализация MyUnit (ProcEnd). Т.е. мне надо в юните отловить момент, после Application.Run, как если бы там сразу было написано ProcEnd;
Я пробовал в юните создавать класс
type
TMyAppOnMessage=Class Procedure MyOnMessage(var Msg:TMsg; var Handled: Boolean);End;
var
MyAppOnMessage:TMyAppOnMessage;
<тут процедура MyOnMessage>
и при иницализации (в ProcBegin) присваивать Application.OnMessage:=MyOnMessage;
и пробовать в новой процедуре отлавливать wm_quit, но почемуто такое сообщение там не ловится (а вот для форм норм). Как можно еще отловить в myunit, что процедура Application.Run; завершена?
← →
Юрий Зотов © (2011-09-13 02:18) [1]> надо в юните отловить момент, после Application.Run, как если бы
> там сразу было написано ProcEnd
А почему бы именно там и не написать ProcEnd? Да и ProcBegin можно вызвать оттуда же, прямо из DPR.
begin
ProcBegin;
try
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
finally
ProcEnd;
end;
end.
← →
Gu (2011-09-13 02:25) [2]... это работает, но надо в myUnit все делать, чтобы файл проекта не трогать. Т.е. мне нужно что то типа Form.onClose только для Application.
ProcEnd нормально отрабатывает и в юните, но к моменту начала ее работы Application уже частично разрушен (но Application еще <> nil) и при освобождении некоторых объектов, которые созданы (в procbegin) как My:=TMy.create(application) вылазят ошибки. Неужели нет способа узнать что Application.run отработал, не прописываю что-то после него?
← →
Gu (2011-09-13 02:44) [3]т.е. фактически ProcEnd отрабатывает, как если бы в ProcBegin было прописано ExitProcessProc:=@ProcEnd; нет ли еще чегото подобного но с более ранним этапом?
← →
Gu (2011-09-13 02:51) [4]Во! нашел: в ProcBegin пишем
AddTerminateProc(@ProcEnd);
← →
Anatoly Podgoretsky © (2011-09-13 08:50) [5]> Gu (13.09.2011 02:51:04) [4]
Ну тогда смотри и InitProc
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c