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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2009, 14:53   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Как закрыть своё приложение???

Раньше вроде Close; работало - сейчас что-то перестало.
TwiX вне форума Ответить с цитированием
Старый 02.08.2009, 15:01   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

основной форме Close или где угодно Application.Terminate
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2009, 15:32   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Еще можна написать EхitРrосеss(0);
или отправить програме сообщение шоб закрылась SеndМеssаgе(Аррliсаtiоn.Наndlе, WM_СLОSЕ, 0, 0);
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 02.08.2009, 15:39   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

ExitProcess, будучи функцией WinApi, не вызывает finalization модулей, вместо него лучше halt(0).
Somebody вне форума Ответить с цитированием
Старый 03.08.2009, 06:45   #5
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
сейчас что-то перестало
Возможно есть контрол у которого Name=Close ...
Попробуйте писать так: Form1.Close ...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 03.08.2009, 09:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
сейчас что-то перестало.
Значит Код смотреть нужно, может там потоки какие незавершаются правильно...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2019, 19:19   #7
NNK_RTR
Пользователь
 
Регистрация: 14.08.2019
Сообщений: 16
По умолчанию

Действительно какой-то бардак.
Мне нужно закрыть приложение, если определенная папка уже существует
Код:
//-------------- Проверка наличия и создание указанной в параметре DirName папки
procedure CheckAndCreateFolder(DirName:string);
begin
 If not DirectoryExists(DirName) then CreateDir(DirName)
   else
   begin
    ShowMessage('Папка "'+DirName+'" уже существует'#13#10+
                'Удалите ее вместе с содержимым вручную'#13#10+#13#10+
                'Программа будет закрыта');
    S_F.Close;         // - это главная форма
    // EхitРrосеss(0);//Функция не распознается (подчеркнута красным)
     S_folder.Close; // модальная форма и она в данный момент отображается
     Application.Terminate;
   end;
end;
//========================
Сам код находится в отдельном модуле, не имеющим формы.
Пробовал все функции по отдельности и все вместе. Приложение закрывается после выполнения вызывающей процедуры. А нужно немедленно.
Как можно решить эту проблему?
Что нужно включить в предложение uses, чтобы функция EхitРrосеss распознавалась?
С уважением, Николай
NNK_RTR вне форума Ответить с цитированием
Старый 31.08.2019, 02:08   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от NNK_RTR Посмотреть сообщение
S_F.Close; // - это главная форма
Регулярная процедура procedure CheckAndCreateFolder() ничего не знает и не может знать ни о каких формах включая главную. Также она не может ничего знать о любых глобальных переменных объявленных в любом модуле проекта.
Если вам достаточно простого совета без объяснений, уберите из приведенного кода строки
Код:
    S_F.Close;         // - это главная форма
    // EхitРrосеss(0);//Функция не распознается (подчеркнута красным)
     S_folder.Close; // модальная форма и она в данный момент отображается
Application.Terminate; всё сделает сам и грамотно.
northener вне форума Ответить с цитированием
Старый 31.08.2019, 10:30   #9
NNK_RTR
Пользователь
 
Регистрация: 14.08.2019
Сообщений: 16
По умолчанию

В вопросе у меня есть строка "Пробовал все функции по отдельности и все вместе", и работают они одинаково: Сначала полностью выполняется код вызывающей процедуры, а затем программа закрывается без всяких дополнительных действий
Код:
unit Routines;

interface
uses
  Winapi.Windows, ..., ;

  procedure FolderSetap;//Создание папки "Настройки"
  ...
  procedure CheckAndCreateFolder(DirName:string);
  ...
implementation

uses SFolders, SPhotos, ListCamer;

procedure FolderSetap;  //Вызывающая процедура
var
  Dir:string;
  ... ;
 begin
  ...
  CheckAndCreateFolder(Dir);
  ...  // После щелчка пользователя по кнопке ОК в сообщении
  ...  // выполняется весь код ниже вызова CheckAndCreateFolder 
  ...  // вплоть до end, и лишь потом программа закрывается.
 end;
Работа функции Application.Terminate отличается от других лишь тем, что модальное окно (S_folder) три раза "подмигивает", но программа не закрывается.
Цитата:
Регулярная процедура procedure CheckAndCreateFolder() ничего не знает и не может знать ни о каких формах включая главную. Также она не может ничего знать о любых глобальных переменных объявленных в любом модуле проекта.
Это еще почему? Чем эта процедура хуже других?
Пока, если не будет найдено другого решения, я добавил глобальную переменную Bol:boolean. Если папка уже существует, то CheckAndCreateFolder устанавливает ее в true. В вызывающую процедуру, сразу после вызова CheckAndCreateFolde, добавил строку if Bol then exit. Теперь функции S_F.Close и Application.Terminate сразу закрывают приложение, а функция S_folder.Close - закрывает только модальную форму. Все, как и должно быть. Не люблю глобальные переменные, пытаюсь использовать их как можно меньше. Если есть другое решение, то подскажите.
С уважением, Николай.
NNK_RTR вне форума Ответить с цитированием
Старый 01.09.2019, 02:36   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от NNK_RTR Посмотреть сообщение
Это еще почему? Чем эта процедура хуже других?
Она не хуже и не лучше. Она живет в ином пространстве имён нежели стандартное Дельфи приложение. Она работает только с переменными переданными ей в качестве параметров и с её собственными локальными переменными.
northener вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как закрыть соединение с радио Михаил Юрьевич Общие вопросы Delphi 0 03.04.2009 19:54
Закрыть чужое приложение Михаил Юрьевич Общие вопросы Delphi 3 28.03.2009 21:26
Как изменить своё имя? Манжосов Денис :) О форуме и сайтах клуба 11 22.07.2008 11:16
Своё окно в трее Altera Общие вопросы Delphi 10 02.07.2008 10:17
как закрыть программу? Alar Общие вопросы Delphi 0 29.10.2006 20:22