powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно закрыть свою программу?
13 сообщений из 13, страница 1 из 1
Как правильно закрыть свою программу?
    #39768572
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток!
Моя программа сворачивается в трей, по нажатию на крестик.
Реализовано вот так:
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caNone;
  Hide;
end;


После этого, Self.close; перестаёт срабатывать.
По этому закрываю так: Halt(0);

Но где-то прочитал, что не желательно закрывать программу таким образом.
Вот собсно и задался вопросом, как правильно закрыть программу?
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39768573
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9neгде-то прочитал, что не желательно закрывать программу таким образом.
Где-то там же написано, как правильно.
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39768590
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9neРеализовано вот так

Установить перед вызовом Close() какой-нибудь флаг и проверять его в OnClose - слишком
сложная идея для современного программиста?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39768623
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne,

Show и Hide работают прекрасно. Не важно, свернуто или на экране форма. Самое главное, что всё это надо делать с ГЛАВНОЙ формой, тогда всё будет закрываться.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TForm1.close1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.hide1Click(Sender: TObject);
begin
  Hide;
end;

procedure TForm1.show1Click(Sender: TObject);
begin
  Show;
end;
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39768628
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторный вызов закрывает форму :-)
Код: pascal
1.
2.
3.
4.
5.
  if Visible then
  begin
    Action := caNone;
    Hide;
  end;
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39768680
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiПовторный вызов закрывает форму :-)
Код: pascal
1.
2.
3.
4.
5.
  if Visible then
  begin
    Action := caNone;
    Hide;
  end;

Закрывает или прячет?
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39769072
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caNone;
  Hide;
end;



Кстати, а Action := caHide чем не устроил?..
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39769097
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GatorJaDiПовторный вызов закрывает форму :-)
Код: pascal
1.
2.
3.
4.
5.
  if Visible then
  begin
    Action := caNone;
    Hide;
  end;

Закрывает или прячет?
При первом вызове спрячет форму, при повторном вызове, если форму так и не показали вновь -- закроет (вместе с приложением).
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39769099
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Из представленного кода закрытия не видно. Это Mainform? И нафига caNone?
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39769104
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,

потому что по умолчанию на OnClose в Action проставляется caHide (сокрытие формы), но у делфи есть еще проверки, что если главную форму с таким action'ом вызвать (где стоит что-то кроме caNone), то делфи это воспринимает как закрытие всего приложения:

...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39769108
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что флаг поставить никак уже ?
что-то типа
if not ForceClose then
begin
action := caHide;
end;
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39769319
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Собственно это и ответ на вопрос ТСа: когда надо выйти из программы, то вместо MainForm.Close надо вызывать Application.Terminate или PostQuitMessage(0).
...
Рейтинг: 0 / 0
Как правильно закрыть свою программу?
    #39769421
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если форма не главная, то в Close пишем
TForm2 := nil; // TForm2 - имя нужной формы в программе
Action := caFree;

Если главная, то просто Close
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно закрыть свою программу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]