Delphi - Как предотвратить перемещение Forms / MsgBoxes по предыдущей форме?

Много раз после эры Windows 98 мы сталкивались с тем, что некоторые диалоги теряют Z-порядок и возвращаются к предыдущей форме.

Например:

Dialog1.ShowModal;

Dialog1.OnClickButton() : ShowMessage('anything');

Когда появляется MessageBox, он иногда не имеет фокуса и перемещается под Dialog1. Пользователи смущены этим, они говорят: мое приложение замерзло !!! Но если они используют Alt + Tab для перехода в другое приложение и обратно, фокус возвращается к MessageBox, и это будет окно переднего плана.

Мы испытали это с ShowMessage, MessageBox, обычными формами, а также с формами QuickReport.

Кто-нибудь знает об этом? Это ошибка Windows? Как вы можете предотвратить это? Как это поймать?

Спасибо за вашу помощь: dd

Я действительно сказал, что ПОСЛЕ Win98, поэтому эта проблема затрагивает все ОС (в том числе и Win7). Мы использовали Delphi 6 Prof, поэтому свойства не работают с формами по умолчанию.

Кто-то сказал, что диалоги сообщений управляются с помощью MessageBox + MB_APPLMODAL. Это хорошая новость, но у нас есть много старых форм и компонентов, сторонних инструментов.

Так что сложно сделать совершенно новое приложение с заменой форм.

Но мы попробуем это сделать.

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

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

Спасибо: дд