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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2008, 20:05   #11
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Послушайте, вы как капризная институтка! То сначала:
Цитата:
если я не хочу искать первую форму, у меня их штук 10
Вам дали конкретный ответ на конкретный вопрос. Так вас потом вдруг осенило:
Цитата:
можно просто закрыть главную форму
Или поболтать захотелось? Так здесь - не чат (пропади они все пропадом)...
mihali4 вне форума Ответить с цитированием
Старый 14.03.2008, 22:13   #12
relav_
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 27
По умолчанию

To mihali4,Kostia

Почитав в helpe про хальт, стало ясно, что это не слишком корректный выход из программы. Поэтому реализовал, как Вы говорите.
Спасибо всем.
relav_ вне форума Ответить с цитированием
Старый 14.03.2008, 22:57   #13
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию

Вот, вот. У меня сейчас проблема, незнаю как сохранить данные дочерней формы.

Создаю ее так:
Код:
   if not assigned(form2) then
       begin
          Application.CreateForm(TForm2, Form2);
          Form2.Show;
       end;
Закрываю ее так:
Код:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
      // Тут сохнаняю настройки
      Action := caFree;
      Form2 := nil;
end;
При закрытии Form2 - все в порядке. Но... если закрыть главное, то вторая дохнет без сохранения настроек. Как быть?

Последний раз редактировалось AnalogXP; 14.03.2008 в 23:00.
AnalogXP вне форума Ответить с цитированием
Старый 14.03.2008, 23:22   #14
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А если сохранять настройки в Form2.OnDestroy ?
alexBlack вне форума Ответить с цитированием
Старый 14.03.2008, 23:24   #15
delphi_beginner
Пользователь
 
Регистрация: 24.02.2007
Сообщений: 22
По умолчанию

Очень просто. Сделать так, чтобы во время работы с дочерней формой нельзя было закрыть основную, а именно:
Код:
if not assigned(form2) then  
 begin  
     Application.CreateForm(TForm2, Form2);  
      Form2.ShowModal;  //а не Show
 end;
Пока не закроется дочерняя форма, с основной работать будет нельзя.
delphi_beginner вне форума Ответить с цитированием
Старый 14.03.2008, 23:29   #16
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Тут сохнаняю настройки
Action := caFree;
Form2 := nil;

end;
Вот это-то зачем???
Форма получила приказ закрыться и выполняет его, производя необходимое сохранение.
Поскольку вы ее показываете не модально, то вам можно при закрытии главной формы сделать
try
Form2.Close;
Form2.Free;
Да и то это необязательно, поскольку при закрывании приложения все формы убьются как детишки этого приложения.

Последний раз редактировалось mihali4; 14.03.2008 в 23:34.
mihali4 вне форума Ответить с цитированием
Старый 15.03.2008, 00:44   #17
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию

Задача в том, чтобы, дочернее окно было полностью независимым от родительского. То есть я должен работать и с главной и с дочерней формой одновременно. Если во время работы приложения, я закрываю дочернее окно, а потом снова ее запускаю, то все как надо сохраняется. Если же во время работы обоих окон, я закрываю главное окно, то дочерняя свои настройки не сохраняет. Вот эту проблему я не могу решить. Убрал я эти
Код:
Action := caFree;
Form2 := nil;
и ничего, все тоже самое.

Кстате, отделяю дочернюю форму от главной, вот так:
Код:
procedure TForm2.FormShow(Sender: TObject);
begin
    SetWindowLong(Handle, GWL_HWNDPARENT, GetDesktopWindow);
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
end;

Последний раз редактировалось AnalogXP; 15.03.2008 в 01:06.
AnalogXP вне форума Ответить с цитированием
Старый 15.03.2008, 01:12   #18
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от AnalogXP Посмотреть сообщение
Задача в том, чтобы, дочернее окно было полностью независимым от родительского. То есть я должен работать и с главной и с дочерней формой одновременно. Если во время работы приложения, я закрываю дочернее окно, а потом снова ее запускаю, то все как надо сохраняется. Если же во время работы обоих окон, я закрываю главное окно, то дочерняя свои настройки не сохраняет. Вот эту проблему я не могу решить.
FormClose обрабатывает сообщение WM_CLOSE, которое, вслед за WM_SYSCOMMAND, в конечном счёте, является следствием щелканья по кнопке "закрыть". Форма же, как и любое окно, при "настоящем" закрытии получает WM_DESTROY, WM_NCDESTROY. Отсюда вывод - записывать настройки в соответствующем обработчике - FormDestroy (или OnDestroy, как его там правильно в VCL зовут)
B_N вне форума Ответить с цитированием
Старый 15.03.2008, 01:36   #19
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот-вот, а каскадное закрытие окон, о котором я уже упоминал, эту проблему снимает
Цитата:
при закрытии главной формы сделать
try
Form2.Close;
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка и падение (выход) Excel при выполнении сложной программы на VBA Serge_Bliznykov Microsoft Office Excel 6 13.08.2008 16:50
Выход из цикла RIO Помощь студентам 1 21.04.2008 22:55
Циклы и выход из них. alikk Общие вопросы Delphi 23 13.04.2008 08:44
Корректный выход Constellation БД в Delphi 3 07.12.2007 15:47
Выход из программы Slash Общие вопросы Delphi 8 24.03.2007 07:53