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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2010, 13:00   #1
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
Восклицание Как программно закрыть все открытые модальные формы перед сворачиванием главной формы в трей?

Добрый день!

В моей программе есть главная форма и две модальные (совет дня и о программе), программа сворачивается в трей (используется компонент TCoolTrayIcon). Когда открыты обе модальные формы и свернуть в трей главную форму все нормально, но если восстановить после этого главную форму, то компилятор выдает ошибку:

проект такой-то raised exception class EInvalidOperation with message ' Cannot make a visible window modal'. Process stopped!

В чем ошибка и как программно предварительно перед скрытием главной формы в трей закрыть все модальные формы программно?

Спасибо
SkAndrew вне форума Ответить с цитированием
Старый 27.01.2010, 13:36   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Когда открыты обе модальные формы
А как пользователь может запустить вторую модальную форму не закрыв первую?

Цитата:
как программно предварительно перед скрытием главной формы в трей закрыть все модальные формы программно?
По событию скрытия окна, или на клик в трее привяжись, посмотри в компоненте события его, в процедуре проверяй, если окна открытые то закрывай их.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.01.2010, 13:51   #3
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Во-первых можно одновременно открыть хоть десяток модальных форм, коды эти открыты в Интернете, во-вторых меня заинтересовала сама задача если такой случай произойдет и я забуду закрыть открытые модальные окна и сверну в трей главное окно, то как программно закрыть модальные окна? Спасибо за идеи.
SkAndrew вне форума Ответить с цитированием
Старый 27.01.2010, 14:05   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

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

Цитата:
как программно закрыть модальные окна?
Form.Close
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.01.2010, 14:20   #5
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Да нет никакого тайного смысла, просто интересна сама ситуация и пути ее решения!
например так можно открывать хоть сотню окон одновременно:

Код:
procedure TfrmMain.miAbout1Click(Sender: TObject);
begin
  with TfrmAboutus.Create(nil) do
  try
      Enter();
  finally
      Free;
  end;
end;
Одно модальное окно, например, можно запустить при старте главного окна (совет дня, например), а второе из раздела всплывающего popup меню иконки в трее (например, о программе) и вот уже открыты три окна, два из них модальные. Вопрос, как корректно закрыть модальные окна в данном случае и по клику на иконке в трее восстановить главную форму без того чтобы компилятор выдал ошибку, приведенную мною выше.
Может кто-то может продолжить дискуссию? Хотелось бы детально разобраться в этом вопросе.
Спасибо.

Последний раз редактировалось SkAndrew; 27.01.2010 в 14:53.
SkAndrew вне форума Ответить с цитированием
Старый 27.01.2010, 17:49   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да что толку продолжать пустую болтовню ?
Вы же неспособны понять то, что вам привел mutabor:
Цитата:
Модальное окно на то и модальное чтобы не позволять продолжить работу пока его не закроешь.
mihali4 вне форума Ответить с цитированием
Старый 27.01.2010, 19:51   #7
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

это не пустая болтавня, а конкретное событие, которое может произойти с достаточно большой вероятностью. так что я не оставляю надежды разобраться в этом случае. Спасибо
SkAndrew вне форума Ответить с цитированием
Старый 27.01.2010, 20:54   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Тогда вопрос такой, как Вы сворачиваете своё главное окно в трей, если оно недоступно, т.к. открыто модальное?!
FaTaL вне форума Ответить с цитированием
Старый 27.01.2010, 22:44   #9
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

тогда напишите вместо
Код:
Form2.ShowModal;
код
Код:
Form2.Show;
, тогда все прекрасно свернется
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно перебрать в цикле все формы в приложении? chandrasecar Общие вопросы Delphi 18 11.09.2009 12:14
Макрос. (Не)модальные формы. Jarik Microsoft Office Excel 6 07.07.2009 15:58
Обращение из формы в dll к элементу главной формы (delphi) a_n_n_a Помощь студентам 3 10.05.2009 04:00
Как поставить заставку перед запуском главной формы программы? NiganInterCOM Общие вопросы Delphi 2 22.02.2008 16:11
Как программно перечислить все формы приложения? Avron Общие вопросы Delphi 5 07.09.2007 08:51