Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

событие OnClose не выполняется   Найти похожие ветки 

 
Валерий   (2003-01-21 06:44) [0]

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


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

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


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

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


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

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


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

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


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

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


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

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


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

А где вопрос?


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

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

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


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

Reindeer Moss Eater (21.01.03 10:49)


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

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


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

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



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

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


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

В общем, если кому-то интересно.
В случае 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;


 
REA ©   (2003-01-21 15:20) [14]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2003.01.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
1-96845
vil
2003-01-21 08:07
2003.01.30
Как перейти к предыдущему компоненту формы?


6-96913
Джанк
2002-11-25 10:43
2003.01.30
Как заставить TNMHHTP работать по проксе ???


1-96717
vidiv
2003-01-21 04:55
2003.01.30
Расскажите пожалуйста, что сдесь надо делать...


14-96979
korvet
2002-12-12 17:08
2003.01.30
Server windows 2000


3-96607
chum
2003-01-13 08:58
2003.01.30
Функция BDE: DbiDoRestructure