Перейти к содержанию
Fire Monkey от А до Я
  • 0

Модальное окно позади формы приложения


Barbanel

Вопрос

Опубликовано

Приветствую, уважаемые!

Довольно давно мучает следующая сложновоспроизводимая проблема:

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

Было высказано предположение, что модальное окно открывается из потока без синхронизации с главный потоком.
Однако это не так.

Собсно вопрос: это баг студии, FMX-компонентов и соотв Эмбаркадеро, или всеже наши кривые ручки?
В последнем случае, поделитесь плиз, как правильно открывать модальные окна?

Рекомендуемые сообщения

  • 0
Опубликовано (изменено)

А Вы пробовали после запуска команды "Show" запустить команду "BringToFront"? 
 

ModalForm.Show;
ModalForm.BringToFront;
Изменено пользователем LBox
  • 0
Опубликовано (изменено)

А может просто имитировать модальное окно обычным окном?

Еще можно попробовать установить для FormStyle TFormStyle(2) что включает для Формы режим StayOnTop

 ModalForm.FormStyle := TFormStyle(2); //TFormStyle(2) = StayOnTop;

Ну и на последок в stackoverflow на похожем топике советуют перед показом модального окна сделать его дочерним по отношению к основной форме 

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.parent := form1;
  Form2.Show;
end;
Изменено пользователем LBox
  • 1
  • Модераторы
Опубликовано

Увидел эту тему и не мог понять, почему я не сталкивался с такой проблемой в своём приложении, которое почти для всех форм использует режим модального окна. Решил покопаться в официальной жире. Есть там тикет (RSS-1714) с описанием похожей проблемы и демкой. В общем, там дело в использовании StyleBook. Если установить UseStyleManager = False, то проблема исчезает, правда вместе с проблемой исчезает и стилизация окна :) Но может как то поможет вам в решении вашей проблемы.

  • 0
Опубликовано

Добрый день, Андрей,
спасибо за ответ, это интересный способ решения.

Мы действительно используем стили, поскольку Firemonkey в данной случае единственный доступный нам способ
оформить приложение именно так как задумано.

Отказ от стилей по факту приведет к переписыванию приложения под VCL 😃

  • 0
Опубликовано
В 23.02.2025 в 22:25, LBox сказал:

А может просто имитировать модальное окно обычным окном?

Модальность в данном случае является удобным инструментом:
Выполнение последующего кода не начинается пока не закроется окно с необходимым результатом.

Конечно можно в теории обойтись и без модальных окон, никто не обязывает их использовать.
Однако это приведет к веселому велосипедостроению с усложненной логикой и не менее веселым дебагом.

  • 0
  • Модераторы
Опубликовано
В 26.02.2025 в 14:03, Barbanel сказал:

Добрый день, Андрей,
спасибо за ответ, это интересный способ решения.

Мы действительно используем стили, поскольку Firemonkey в данной случае единственный доступный нам способ
оформить приложение именно так как задумано.

Отказ от стилей по факту приведет к переписыванию приложения под VCL 😃

Посмотрел репорт о баге подробнее, оказалось, автор нашёл ещё один способ. Добавить BringToFront в модальную форму.

Судя по его исследованию, проблема возникает, когда модальная форма генерирует изменение (и перекраску).

Проверил на его демке, помогло (для теста добавил BringToFront в событие OnPaint модальной формы).

p.s. Репорт (RSS-1714) появился там 6 сентября 2024 года

  • 0
Опубликовано
9 часов назад, Andrey Efimov сказал:

Да, вот прямо сейчас проверял, модальная форма перестаёт проваливаться под основную. На всякий случай, Delphi 12.2.

Ну вот как и предпологали в самом начале топика все-таки "BringToFront" решает проблему ✌️😎
Надо было всего лиш запустить его в "OnPaint" 😃 Ну что же будем теперь знать 👍 

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...