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

Вниз

Не срабатывает OnClose. Правильно ли это ?   Найти похожие ветки 

 
half_litre   (2004-06-30 15:16) [0]

В MainForm создаю :
var f    : TSomeForm;

 f:=TSomeForm.Create(Application);
 with TfrmSqlForm(f) do begin
    ....
    Show
 end;
.........
Если в теле TSomeForm делаю Close,TSomeForm.OnClose
срабатывает. Но если закрываю MainForm (Close) то
TSomeForm.OnClose не срабатывает, только OnDestroy.
Нормально ли это ?
(TSomeForm.FormStyle=fsNormal)


 
Iconka   (2004-06-30 15:30) [1]

Попробуй f:=TSomeForm.Create(Self);


 
half_litre   (2004-06-30 15:34) [2]

Увы, тоже самое


 
Sandman25 ©   (2004-06-30 15:35) [3]

OnClose не срабатывает в ряде случаев (при программной перезагрузке, например). OnCloseQuery срабатывает.


 
Iconka   (2004-06-30 15:36) [4]

Тогда забей на это и перенеси тело функции OnClose в OnDestroy.


 
half_litre   (2004-06-30 15:38) [5]

Забить то можно, но хочется понять причину сего.


 
Iconka   (2004-06-30 15:43) [6]

Тогда поставь точки останова и по F8-F7 пройдись по функциям.


 
half_litre   (2004-06-30 15:45) [7]

Дык ф-ий то : в MainForm только Close и ...... и все !!!


 
Iconka   (2004-06-30 15:46) [8]

вот и мотри внутриности TForm.Close и прочии побочные...


 
half_litre   (2004-06-30 16:15) [9]

Нашел в Forms.pas :

procedure TCustomForm.Close;
.........
if Application.MainForm = Self then Application.Terminate
......
а при Application.Terminate, я слышал, OnClose не срабатывает.
Получается я сам должен вести список созданных мною окон и
по MainForm.OnClose сам по списку их закрывать.

Может кто знает менее геморойный способ ?


 
half_litre   (2004-06-30 16:27) [10]

Если кому интересно.
на MainForm.OnClose :

 for i:=0 to Screen.CustomFormCount - 1 do
    if Screen.CustomForms[i].Handle<>self.Handle
        then Screen.CustomForms[i].Close


 
half_litre   (2004-06-30 16:29) [11]

А вообще это МАРАЗМ. Я был сильно удивлен такой бяке в Delphi


 
MacroDenS ©   (2004-06-30 16:45) [12]


Получается я сам должен вести список созданных мною окон и
по MainForm.OnClose сам по списку их закрывать.


А вообще при закрытии главной формы вызывается событие OnDestroy для всех компонентов (и форм в том числе), так, что клоузить все формы необязательно.


 
half_litre   (2004-06-30 16:53) [13]

Мне это важно было :
В TSomeForm.OnClose я делал FreeLibrary(someDll)
Если это же делать по Destroy, то по закрытию приложения
RunTime Error


 
MacroDenS ©   (2004-06-30 16:58) [14]

А если делать FreeLibrary(someDll) в OnClose главной формы?


 
half_litre   (2004-06-30 17:03) [15]

Главная о someDll не в курсах :))

И вот интересно почему на OnClose FreeLibrary - OK
а на OnDestroy RunTime Error


 
MacroDenS ©   (2004-06-30 17:08) [16]


Главная о someDll не в курсах :))

Укажи в юзесах модуль той формы, где про someDll пишеться.

И вот интересно почему на OnClose FreeLibrary - OK
а на OnDestroy RunTime Error

потому-что дестрой дочерних форм и компонентов происходит раньше, чем наступает событие дестрой главной формы



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

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

Наверх




Память: 0.5 MB
Время: 0.026 c
1-1087993092
killer
2004-06-23 16:18
2004.07.11
Как можно изменить цвет рамки и кнопочки в DateTimePicker?


1-1088054119
Pasha
2004-06-24 09:15
2004.07.11
Народ, подскажите плз. как мне дописать сводку к файлу


14-1088116517
Феликс
2004-06-25 02:35
2004.07.11
Тест с картинкой


14-1087305175
Gero
2004-06-15 17:12
2004.07.11
Фотки форумчан


1-1088078327
ThermiT
2004-06-24 15:58
2004.07.11
Работа с MS Word (генерация отчетов)