Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 16:59   #1
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
Сообщение Application.Terminate или Close?

Не помню,где читал,что лучше использовать Terminate.
Так оно и есть?
И где можно почитать поподробней про ProccessMessages и вообще о
Application?
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 21.09.2010, 17:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для чего?
Иногда еще круче прийдутся ко столу Halt и ExitProcess
Цитата:
И где можно почитать
Имхо, хелп - подробнее не найти.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2010, 17:21   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему лучше Close чтоб деструктор выполнился и тд.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.09.2010, 17:24   #4
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Цитата:
Не помню,где читал,что лучше использовать Terminate.
В хелпе по Дельфи так и написано.
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 21.09.2010, 17:58   #5
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Close только окно закрывает. Оно может однажды стать не основным.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 21.09.2010, 18:06   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хотя вроде вы правы, Terminate же уничтожает формы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.09.2010, 18:33   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

MainForm.Close - вызывает закрытие немедленно. Application.Terminate - отправляет сообщение о закрытии в очередь. Т.е форма закроется после обработки всех сообщений.

В 99% случае разницы между немедленным закрытием и отложенным - нет.

Ссылка:
Цитата:
Ends application execution.

Call Terminate to end the application programmatically. By calling Terminate rather than freeing the application object, you allow the application to shut down in an orderly fashion.

Terminate calls the Windows API PostQuitMessage function to perform an orderly shutdown of the application. Terminate is not immediate.
Terminate is called automatically on a WM_QUIT message and when the main form closes.
Цитата:
Сообщение от OCTAGRAM Посмотреть сообщение
Оно может однажды стать не основным.
Application.MainForm.Close?

Цитата:
Сообщение от ex.cluz Посмотреть сообщение
В хелпе по Дельфи так и написано.
Где?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 21.09.2010 в 18:37.
GunSmoker вне форума Ответить с цитированием
Старый 21.09.2010, 19:57   #8
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
помоему лучше Close чтоб деструктор выполнился и тд.
Так ведь при вызове процедуры Close выполняются просто действия которые прописаны пользователем в процедуре Form1.OnClose. Ежели этот метод пустой, то вроде как бы просто выполняется деструктор формы.
А Application.Terminate - это просто банальное принудительное удаление программы из памяти(ну, уничтожение процесса)
Цитата:
MainForm.Close - вызывает закрытие немедленно
...Немедленно....?Только при вызове этого метода приложение иногда даже из памяти не удаляется.А иногда даже не закрывается.

Последний раз редактировалось _-Re@l-_; 21.09.2010 в 20:18.
_-Re@l-_ вне форума Ответить с цитированием
Старый 22.09.2010, 02:29   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
А Application.Terminate - это просто банальное принудительное удаление программы из памяти(ну, уничтожение процесса)
Более глубокое заблуждение трудно себе представить. Ещё это показывает, что вы не читаете посты в теме до вас.

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
...Немедленно....?Только при вызове этого метода приложение иногда даже из памяти не удаляется.А иногда даже не закрывается.
Если кривые руки пишут говно-код, то Form.Close ещё может вызывать форматирование вашего диска.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.09.2010, 03:23   #10
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
Радость

Цитата:
Сообщение от Alexei91 Посмотреть сообщение
Не помню,где читал,что лучше использовать Terminate.
Так оно и есть?
И где можно почитать поподробней про ProccessMessages и вообще о
Application?
Если необходимо выйти из программы, то рациональнее использовать Terminate, потому как метод Close после проверок - главное окно закрывается или нет - также вызывает метод Terminate:

Код:
procedure TCustomForm.Close;
var
  CloseAction: TCloseAction;
begin
  if fsModal in FFormState then
    ModalResult := mrCancel
  else
    if CloseQuery then
    begin
      if FormStyle = fsMDIChild then
        if biMinimize in BorderIcons then
          CloseAction := caMinimize else
          CloseAction := caNone
      else
        CloseAction := caHide;
      DoClose(CloseAction);
      if CloseAction <> caNone then
        if Application.MainForm = Self then Application.Terminate
        else if CloseAction = caHide then Hide
        else if CloseAction = caMinimize then WindowState := wsMinimized
        else Release;
    end;
end;
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод Close для ADODataSet вызывает ошибку 'BOF или EOF имеет ...' (mdac 6.0) jane БД в Delphi 1 16.07.2008 07:34
Application.terminate GAGARIN-NEW Общие вопросы Delphi 11 09.03.2008 19:32
ошибка terminate KORT Общие вопросы Delphi 9 07.10.2007 00:56
поток, который по завершению (Terminate) передает в основную форму информацию о файле 1Andrey1 Общие вопросы Delphi 5 10.09.2007 19:40