Delphi - Como impedir Forms / MsgBoxes para mover sob forma anterior?

Muitas vezes após a era do Windows 98, percebemos que algumas caixas de diálogo perdem a ordem Z e voltam para a forma anterior.

Por exemplo:

Dialog1.ShowModal;

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

Quando o MessageBox aparece, às vezes ele não tem foco e é movido em Dialog1. Os usuários estão confusos sobre isso, eles dizem: Meu aplicativo congelou !!! Mas se eles usarem Alt + Tab para mover para outro aplicativo e voltar, o foco retornará para o MessageBox e será a janela do primeiro plano.

Experimentamos isso com ShowMessage, MessageBox, formulários normais e também com formulários QuickReport.

Alguém sabe sobre isso? É um bug do Windows? Como você pode evitá-lo? Como pegar isso?

Obrigado pela sua ajuda: dd

Eu realmente disse que APÓS o Win98, então todos os sistemas operacionais (Win7 também) são afetados por esse problema. Nós usamos o Delphi 6 Prof, portanto as propriedades não estão funcionando com os formulários Padrão.

Alguém disse que os diálogos de mensagens são controláveis com MessageBox + MB_APPLMODAL. Esta é uma boa notícia, mas temos muitos formulários e componentes antigos, ferramentas de terceiros.

Portanto, é um trabalho difícil fazer um aplicativo completamente novo com a substituição dos formulários.

Mas vamos tentar fazer isso.

Penso que a resposta é este é um problema de meia aplicação e metade de um problema no Windows. Se o Windows às vezes lida com isso, e às vezes não - isso parece ser um bug do Windows. Mas se podemos forçar uma boa janela modal, é um erro de programação.

Alguém pode me explicar qual é o significado do sinalizador WS_POPUP? Isso tem algum efeito colateral ou não?

Obrigado: dd