![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
событие 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]Уточнение!
Событие не происходит когда программа автоматически
закрывается после завершения работы программы-клиента!