Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

событие OnClose не выполняется


Валерий ©   (2003-01-21 06:44:00) 

Почему не происходит событие OnClose главной формы
программы-сервера при ее закрытии
в связи с закрытием программы-клиента в ActiveX-Приложениях?
Заранее всем благодарен!


Валерий   (2003-01-22 04:16:00) [1]

Всем Спасибо!
to Karbazol
Большое спасибо!
Буду копать!


REA   (2003-01-21 15:20:00) [2]

OnClose частенько не вызывается - например при завершении работы windows. Проще деструктор переписать или OnDestroy.


Karbazol   (2003-01-21 13:58:00) [3]

В общем, если кому-то интересно.
В случае ActiveX сервера типа CLSCTX_LOCAL_SERVER событие OnClose главной формы не вызывается из-за того, что при уничтожении последнего объекта в очередь сообщений основного треда помещается WM_QUIT, а это сообщение до форм не доходит ;-) и, следовательно, никакие события не генерируются...

Решение:

.......
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure LastObjectRelease(var Shutdown: boolean);
end;

implementation

uses
..., ComServ,...

......
procedure TForm1.FormCreate(Sender: TObject);
begin
ComServer.OnLastRelease := LastObjectRelease;
end;
......

procedure TForm1.LastObjectRelease(var Shutdown: boolean);
begin
if Shutdown then
Close;
end;


Karbazol   (2003-01-21 11:41:00) [4]

Хорошо. Событие OnClose генерится в методе Close.
Если метод Close не вызывается, то возникает закономерный вопрос.
Что происходит при закрытии ActiveX сервера типа CLSCTX_LOCAL_SERVER? Потому что отследить стек вызовов средствами Delphi не удалось.
Или, возможно, кто-то знает в каком направлении нужно копать.


Reindeer Moss Eater   (2003-01-21 11:18:00) [5]

Событие OnCloseгенерится при вызове метода Close;
Нет вызова метода (Close) - не будет и события (OnClose)


Валерий   (2003-01-21 11:08:00) [6]

Reindeer Moss Eater
Не понял ваш юмор!
Вопрос открытый!


Reindeer Moss Eater   (2003-01-21 11:03:00) [7]

Reindeer Moss Eater (21.01.03 10:49)


Валерий   (2003-01-21 11:02:00) [8]

Reindeer Moss Eater (21.01.03 10:57)
А где вопрос?

тогда вопрос почему не происходит Close?


Reindeer Moss Eater   (2003-01-21 10:57:00) [9]

А где вопрос?


Валерий   (2003-01-21 10:56:00) [10]

По событию OnClose сохраняются настройки программы.
В случае закрытия пользователем программы все события
происходят,но если закрывается последняя
программа-клиент,то в этом случае автоматически закрывается
программа-сервер и не вызывается событие OnClose.
происходят события onHide и onDestroy.


Reindeer Moss Eater   (2003-01-21 10:49:00) [11]

OnClose генерится при вызове метода Close;
Нет вызова - нет события


Валерий   (2003-01-21 10:44:00) [12]

Identifikator Borna
оно просто не происходит
в инспекторе создаю обработчик на событие OnClose у главной формы
Shodan
в этом случае оно тоже не происходит


Shodan   (2003-01-21 09:29:00) [13]

может нужно трабатывать событие OnCloseQuery


Identifikator Borna   (2003-01-21 09:19:00) [14]

>> Валерий (21.01.03 06:53)
А как вы обрабатываете событие OnClose ?


Валерий   (2003-01-21 06:53:00) [15]

Уточнение!
Событие не происходит когда программа автоматически
закрывается после завершения работы программы-клиента!


Наверх

Титульная страница Поиск, карта сайта Написать письмо