Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Закрытие формы программно
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Андрейка C. Андрейка C. вне форума
Member
 
Сообщений: 199
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2005
По умолчанию Закрытие формы программно - 02.02.2006, 22:11

Допустим есть главная форма, у нее меню. Кликаю пункт меню, выскакивает вторая форма. На этой форме кнопка "ОК", при нажатии на которую мне надо эту вторую форму закрыть, а после этого, скажем, в файл на диске сбросить какую-то информацию. В самом начале обработчика нажатия на кнопку написал Close(), далее пошел остальной текст. НО! Форма почему-то не закрылась до тех пор, пока не завершилось сбрасывание информации. Вызов CloseQuery() вернул ture. В чем тут дело?
Ответить с цитированием
  (#2 (permalink)) Старый
Nicky_cr Nicky_cr вне форума
Member
 
Сообщений: 102
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.01.2006
По умолчанию 03.02.2006, 00:13

Привет
А что если работать c файлом в Form2::OnDestroy?
С уваженеим Ники.....
Ответить с цитированием
  (#3 (permalink)) Старый
dddd dddd вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.02.2006
По умолчанию 03.02.2006, 08:55

...Мне кажется большого смысла, в данной ситуации, нету.
У тя ведь не многопотоковое приложение. От того что у тебя
раньше или позже закроется окошко, большого эффекта не даст.
Потому что программа в любом случае должна будет ждать когда
завершится процесс записи на диск, иными словами, будет стопор
в этот момент и никакая кнопка работать в этой программе до тех пор
не будет...
Ответить с цитированием
  (#4 (permalink)) Старый
Андрейка C. Андрейка C. вне форума
Member
 
Сообщений: 199
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2005
По умолчанию 03.02.2006, 09:47

To dddd:
Дело в том, что у меня операция записи на диск может длиться около 5 секунд, я в это время хотел закрыть эту вторую форму, а на главной показывать в ProgressBar'e ход процесса записи. Вот.
Ответить с цитированием
  (#5 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 6,633
Сказал(а) спасибо: 12
Поблагодарили 797 раз(а) в 782 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию Re: Проблема с закрытием формы - 03.02.2006, 11:57

Цитата:
Originally posted by Андрейка C.
[b]...вторая форма. На этой форме кнопка "ОК", ... В самом начале обработчика нажатия на кнопку написал Close(), далее пошел остальной текст. НО! Форма почему-то не закрылась до тех пор, пока не завершилось сбрасывание информации. Вызов CloseQuery() вернул ture. В чем тут дело?
пока не завершится запись, т.е. обработчик нажатия кнопки ОК, форма и не должна закрываться.
Для получения необходимой последовательности запись необходимо производить в первой форме сразу после закрытия второй.
Можно попробовать вместо Close поставить Hide(); а после окончания записи - Close();
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Nicky_cr Nicky_cr вне форума
Member
 
Сообщений: 102
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.01.2006
По умолчанию 03.02.2006, 12:15

Привет
Думаю в Hide смысла нет все равно ее закрывать к тому же если вторая форма модальна.....
Короче закрыть ее спокойненько, предварительно передав нужные данные в первую, и работать с файлом.....
С уваженеим Ники....
Ответить с цитированием
  (#7 (permalink)) Старый
_shumer _shumer вне форума
Member
 
Сообщений: 30
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.01.2006
По умолчанию 03.02.2006, 12:52

Цитата:
Originally posted by Nicky_cr
[b]Привет
Короче закрыть ее спокойненько, предварительно передав нужные данные в первую, и работать с файлом.....
Передавать данные никакие не нужно. После закрытия второй формы доступ к ее элементам остается свободным. Можно как считывать данные из компонентов, так и менять их.
Никто не мешает производить запись из первой формы сразу после закрытия второй, если вторая форма вызвана как модальная. При обычном вызове произойдет распараллеливание потоков, и тогда нужно будет позаботиться о том, чтобы возвращать управление первой форме после закрытия второй, что неудобно.
Самый простой вариант сделать так
Код:
void __fastcall TForm1::NewForm2Menu1Click(TObject *Sender)
{
Form2->ShowModal();
//действия по записи
}
Ответить с цитированием
  (#8 (permalink)) Старый
dddd dddd вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.02.2006
По умолчанию 03.02.2006, 15:13

>Дело в том, что у меня операция записи на диск может длиться около >5 секунд, я в это время хотел закрыть эту вторую форму, а на >главной показывать в ProgressBar'e ход процесса записи. Вот.
to Андрейка C.

Все равно некрасиво будет... Твою некрасивую задачу можно решить
так:
1.Переопределяешь метод Notification в главной MDI форме.
в h файле пишешь
Код:
 virtual void __fastcall Notification(Classes::TComponent* AComponent, Classes::TOperation Operation);
2.В CPP файле пишешь
Код:
void __fastcall TForm1::Notification(Classes::TComponent* AComponent, Classes::TOperation Operation)
{
    TForm::Notification( AComponent,Operation);
    if(AComponent==Form2 && Operation==opRemove)
    {
       //    запись на диск
    }
}
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрытие USB-Портов Green88 Софт и программы 2 23.06.2008 12:43
Закрытие формы из обработчика OnActivate Neyel C++ Builder 9 30.05.2008 14:32
Закрытие приложения программно imported_@LeX Delphi 4 27.07.2007 20:40
Закрытие формы как правильно сделать baklan2004 Delphi 9 04.07.2006 12:59
Закрытие доступа integral Офтопик 6 25.05.2006 16:46
Закрытие WebBrowser SeregaLBN Visual C++ 0 03.11.2005 16:59
Как программно изменить размер формы? imported_Lio Prolog 2 15.04.2005 09:07
Закрытие приложения и закрытие всех соединений Patriot Delphi 4 25.03.2005 23:53
Закрытие формы пр создании приложения kvv C++ Builder 2 07.10.2004 23:36
Закрытие активного соединения Orkan Perl 0 20.07.2004 18:38
При обращении к компонентам дочерней формы из главной формы программа выдает ошибку AHDPE C++ Builder 6 12.04.2004 12:02
Закрытие Excel Anonymous Visual Basic 1 05.06.2003 11:42



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов