Проблема с несколькими модальными диалогами с использованием Delphi XE - PullRequest
6 голосов
/ 07 июня 2011

Вот моя проблема.

У меня запущено основное приложение, и я открываю модальное диалоговое окно1, на этом этапе основной экран приложения отключен, и все фокусируются на новом диалоговом окне1.

Из этого диалога1 я открываю другой модальный диалог2. Таким образом, теперь главный экран и диалоговое окно 1 отключены, и этот диалоговое окно 2 полностью сфокусировано. Идеально до сих пор.

Теперь, когда я закрою этот верхний диалог2, я ожидаю, что он просто вернется к диалогу1. Он фокусируется на dialog1, но главное приложение теперь включено, и вы можете щелкнуть в любом месте, которое отправляет диалоговое окно1, но оставляет его открытым. Это вызывает проблемы в 1% случаев, когда пользователь не сразу закрывает диалоговое окно1 и щелкает мышью. Как вы можете себе представить, QA это не нравится; o)

Похоже, что Windows немного запуталась, потому что основное приложение, похоже, знает, что диалоговое окно1 все еще открыто, поскольку кнопка на ленте все еще не нажата.

Есть идеи?

Лучшее, что мне удалось сделать, это установить явно:

dialog1.PopupMode := pmExplicit; dialog1.PopupParent := MainFrm;

Кажется, что при закрытии диалогового окна 2 в диалоговом окне основного приложения он остается поверх основного приложения, даже если щелкнуть основное приложение. Так что это побудит пользователя закрыть его, но это не на 100% правильно.

Редактировать: С тех пор я создал отдельное приложение, и оно работает как положено. Когда вы закрываете окна, управление и фокус возвращаются из диалогового окна 2 в диалоговое окно 1, а затем в главное приложение, когда диалоговое окно 1 закрыто. В нашем ленточном коде предлагается что-то еще, что я не могу найти. Гм!

1 Ответ

0 голосов
/ 22 августа 2014

Это известная ошибка.Смотрите отчет за 11 лет назад http://borland.public.delphi.ide.narkive.com/fVG9CSwl/big-problem-in-delphi-with-modal-forms-please-help У меня тоже было.У меня была ссылка на отчет об ошибке в Embarcadero QA.Вы ничего не можете сделать.

...