Не могу фокусировать приложение Firemonkey, когда модальное диалоговое окно открыто, если только само модальное диалоговое окно не нажано

У меня есть приложение, в котором пользователям при входе в систему предлагается модальное диалоговое окно, в котором они должны выбрать средство, из которого они хотят работать. На этом этапе приложение выглядит так:

введите описание изображения здесь

Модальное диалоговое окно отображается при вызове этого метода:

bool __fastcall ShowFacChoiceForm()
{
TFacChoiceForm *Form = new TFacChoiceForm( Application );

bool Result = ( Form->ShowModal() == mrOk );

delete Form;

return Result;
}

В этом случае, TFacChoiceForm наследуется от TForm Итак ShowFacChoiceForm() функция вызывает стандарт TForm.ShowModal метод задокументировано здесь.

Проблема, с которой я сталкиваюсь, заключается в том, что если мое приложение теряет фокус, оно не может снова стать активным окном, если не щелкнуть само модальное диалоговое окно. Чтобы лучше проиллюстрировать это, я представлю следующий сценарий:

Допустим, сегодня пятница, и я решил немного отрешиться и почитать некоторые веб-комиксы. Открыв свое приложение, я открываю другое окно поверх него, например, так:

введите описание изображения здесь

Затем, откуда ни возьмись, мой босс приходит на анализ производительности, и я пытаюсь переориентировать свое приложение, щелкая где-нибудь в главной форме. Например, в позиции этого красного X на следующем изображении.

введите описание изображения здесь

На изображении выше я щелкнул мышью в месте красного X. Теперь и форма, содержащая веб-комикс, и мое приложение неактивны. Таким образом, мое приложение не выходит на переднюю часть экрана.

Однако, если я могу щелкнуть где-нибудь в модальном диалоговом окне, например, красный крестик на следующем рисунке …

введите описание изображения здесь

…тогда мое заявление выходит на передний план, как и следовало ожидать.

введите описание изображения здесь

Чтобы решить эту проблему, я посмотрел на использование чего-то вроде SetForegroundWindow из Windows API, но я не смог найти способ вызвать событие, так как моя основная форма не запускает события, пока у меня открыто модальное диалоговое окно.

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

1

Решение

Если вы установите для параметра modalresult значение mrcancel в режиме деактивации модального диалогового окна, то при нажатии на него основная форма получит фокус. Затем вы можете проверить, вошел ли пользователь в событие mousedown главной формы, и если нет, снова показать модальное диалоговое окно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]