Как сделать OpenDialog модальным в Firemonkey?
-
26-10-2019 - |
Вопрос
Когда я вызываю OpenDialog из своей формы в событии ButtonClick.Диалоговое окно не отображается как модальное и также отображается на панели задач (в WindowsXP).Я могу вернуться к основной форме и нажимать Открыть снова и снова - появляется сразу несколько диалоговых окон..
Как мне сделать OpenDialog модальным в Firemonkey?Специально ли это сделано для того, чтобы никакие модальные диалоги не были разрешены из-за мультиплатформенной структуры FM?
Редактировать: Ошибка исправлена в обновлении 3.
Решение
Я думаю, это ошибка.В FireMonkey много ошибок модального типа, и, надеюсь, они будут исправлены в ближайшее время.В настоящее время даже модальные формы не являются модальными.
Для решения вашей проблемы у меня есть обходной путь для Windows, но вам это может не понравиться.
Вам необходимо исправить следующую строку в методе TPlatformWin.DialogOpenFiles() в FMX.Platform.Win.
Под with OpenFile do
изменение:
hwndOwner := 0;
К этому:
hWndOwner := FmxHandleToHWND(Application.MainForm.Handle);
Эта функция использует Windows GetOpenFileName
Вызов API, даже несмотря на то, что он устарел в Vista и выше.Если передается дескриптор владельца, диалоговое окно является модальным, в противном случае это не так.
Возможно, вы захотите отправить это как ошибку в qc.embarcadero.com вместе с обходным путем.