Текущий архив: 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.47 MB
Время: 0.008 c