Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Application.Terminate [D2005, XP]


Dmitry_177 ©   (2007-04-25 08:41:00) 

При выполнении Application.Terminate выполняется ли Form.Destroy?


Игорь Шевченко   (2007-04-26 16:07:00) [1]

Если был вызов Application.CreateForm, то форма будет создана с Owner=Application, а при уничтожении Application, он, как всякий порядочный компонент, уничтожает своих детей, при этом и вызовется Form.Destroy.

Разумеется, Form.Destroy вызывается при Application.Free


ANB   (2007-04-26 16:05:00) [2]


> Form.Destroy не сработает при Application.Terminate, а там
> у меня идет освобождение памяти и т.д..

Если процесс завершается, то винда сама удалит адресное пространство и все почистит.


Сергей М.   (2007-04-26 16:02:00) [3]


> Dmitry_177   (26.04.07 15:57) [10]


Вот тебе цитата из forms.pas (D7):

procedure TApplication.Terminate;
begin
 if CallTerminateProcs then PostQuitMessage(0);
end;

Где ты здесь видишь Destroy ?


Сергей М.   (2007-04-26 15:59:00) [4]


> Dmitry_177   (26.04.07 15:44) [7]


> т.к. судя по


Когда исходники-то борландовские читать будем ?


Сергей М.   (2007-04-26 15:59:00) [5]


> Dmitry_177   (26.04.07 15:57) [10]
>
> При Application.Terminate; всетаки вызывается Form.Destroy


Нет, не вызывается.


Dmitry_177   (2007-04-26 15:57:00) [6]

При Application.Terminate; всетаки вызывается Form.Destroy.. В Form.Destroy сделал в качестве теста MessageBox и он выскочил при Application.Terminate; без Form1.Close;


McSimm_   (2007-04-26 15:53:00) [7]

Возможно поможет PostQuitMessage


Kolan   (2007-04-26 15:47:00) [8]

> У меня в Form.Create считываются всякие настройки, для них
> выделяется память и т.д. и если при считывании произошла
> какая-то ошибка,

То надо сообщать об этом и применять настройки по умолчанию, имхо.


Dmitry_177   (2007-04-26 15:44:00) [9]

Я сделал так:

         Form1.Close;
         Application.Terminate;


т.к. судя по:

> Dmitry_177   (25.04.07 08:41) 
> При выполнении Application.Terminate выполняется ли Form.
> Destroy?
>
> Сергей М. ©   (25.04.07 08:52) [1]
> Нет.

Form.Destroy не сработает при Application.Terminate, а там у меня идет освобождение памяти и т.д..


Сергей М.   (2007-04-26 15:40:00) [10]


> Dmitry_177   (26.04.07 15:38) [5]


Ну замени Close на Application.Terminate)
Вот ведь велика проблема-то !)


Dmitry_177   (2007-04-26 15:38:00) [11]

Сергей М.

если так сделать, то окно при ошибке не показывается, но программа всеравно остается запущенной..


Сергей М.   (2007-04-25 09:11:00) [12]

Application.Initialize;
Application.ShowMainForm := False;
Application.CreateForm(TForm1, Form1);
Application.Run;
..

procedure TForm1.Create;
begin
...
if Условие then
 Visible := True
else
 Close;
end;


Dmitry_177   (2007-04-25 09:05:00) [13]

У меня в Form.Create считываются всякие настройки, для них выделяется память и т.д. и если при считывании произошла какая-то ошибка, как мне в Form.Create правильно завершить программу? Я делаю так:
Application.Terminate;
Exit;

приложение завершается, но у меня окно быстро появляется и исчезает сразуже.. может как то по другому надо?


homm   (2007-04-25 08:54:00) [14]

> При выполнении Application.Terminate выполняется ли Form.Destroy?

что, проверить то самому слабо за минуту? Проще ждать когда здесь ответят.


Сергей М.   (2007-04-25 08:52:00) [15]

Нет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо