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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2012, 09:44   #1
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию Закрыть форму по команде TsaveDialog

Код:
if SaveNewFile.Execute() = True then
 begin
  //Тут тело программы;
 end;
При запуске TSaveDialog если юзер нажимает сохранить, то выполняется то что в теле кода выше (ну это как пример)! Подскажите как сделать так что бы форма закрывалась, если юзер в TSaveDialog выбрал ОТМЕНА?
kta87 вне форума Ответить с цитированием
Старый 20.05.2012, 10:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Элементарно, Ватсон
Код:
if SaveNewFile.Execute() = True then
 begin
  //Тут тело программы;
 end else close;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2012, 10:14   #3
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

ну было бы так просто, не писал бы... так как ты написал не работает.. вот кусок кода...
Код:
 if SaveNewFile.Execute() = True then
      begin
        FilePath:= SaveNewFile.FileName + '.exe';
        ComDown:= TDownLoader.Create(true);
        ComDown.URL:= 'тут у меня ссылка на новую программу';
        ComDown.ToFolder:= FilePath;
        ComDown.FreeOnTerminate:= True;
        ComDown.OnTerminate:= thrTerminate;
        ComDown.Start;
      end
     else
      UpdateModule.Close;
kta87 вне форума Ответить с цитированием
Старый 20.05.2012, 10:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
так как ты написал не работает
Ладно. по другому. Замени UpdateModule.Close; на ShowMessage() или поставь на нее бряк. Запусти прогу - остановится она на бряке, или вылезет сообщение?
Если да (уверен что вылезет) значит у тебя где-то еще что-то мешает закрытию формы.
Пройдись по шагам - будь проггером, в конце то концов )
По твоему куску кода сложно понять что там у тебя написано такого что конфликтует.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2012, 10:39   #5
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Ну ты прав, конечно.. сообщение появляется. В программе использую потоки, как видишь они подключатся как раз в том условии что по SaveDialog.Execete() = True; По этому ни как не могу понять что мешает закрытию форму... Подскажи способы для отыскивания такого дела..?
kta87 вне форума Ответить с цитированием
Старый 20.05.2012, 10:46   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Подскажи способы для отыскивания такого дела.
Wow! Смекалистая башка, наблюдательность и отладчик...
Там где идет закрытие формы нужно останавливать все потоки, которые были запущены. Ты их храни в TThreadList и с помошью его останавливай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2012, 23:03   #7
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Если нужно закрыть всю программу, то Application.Terminate должно сработать.
Miha85193 вне форума Ответить с цитированием
Старый 21.05.2012, 07:35   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то Application.Terminate должно сработать.
Не всегда. Если есть какие-то потоки или еще что-то задерживающее программу в открытом состоянии то этот метод может обломаться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.05.2012, 13:45   #9
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не всегда. Если есть какие-то потоки или еще что-то задерживающее программу в открытом состоянии то этот метод может обломаться.
Наверное дело в самом коде программы, потому, как обычно срабатывает и Close и Application.Terminate.

Топикстартеру я бы посоветовал следующее

Код:
if SaveNewFile.Execute then
begin
  ///
end 
else Timer1.Enabled := True;
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Close;
end;
Если форма, в принципе, может динамически закрываться, то должно сработать. Если нет, то вся проблема в коде.
Miha85193 вне форума Ответить с цитированием
Старый 21.05.2012, 17:59   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

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

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

Туда очень просто добавить свойство модального результата.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрыть приложение через дочернюю форму Человек Панда Помощь студентам 4 15.07.2011 23:08
Закрыть и открыть форму Swatch Microsoft Office Access 1 31.05.2010 23:04
Как закрыть форму при показе RIO Общие вопросы Delphi 4 28.08.2009 07:54
Как закрыть MDIChild форму по нажатию на кнопку AndreyF Общие вопросы Delphi 4 11.07.2009 16:26
Закрыть форму при нажатии на Button Ellita Помощь студентам 5 26.09.2007 20:49