Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
7-97064
avenger..
2002-11-14 22:50
2003.01.30
скрытие процесса в winNT и winXP


3-96570
dash78
2003-01-13 08:32
2003.01.30
Работа с Excel


14-96961
ferrik
2003-01-12 18:32
2003.01.30
Компоненты


14-96971
Иксик
2003-01-11 12:28
2003.01.30
PCI, ISA


3-96539
comwwad
2003-01-15 08:31
2003.01.30
Взаимодействие Д и Е




   Наверх