Delphi - ¿Cómo evitar que Forms / MsgBoxes se muevan bajo forma previa?

Muchas veces después de la era de Windows 98, hemos experimentado que algunos cuadros de diálogo pierden su orden Z y vuelven a la forma anterior.

Por ejemplo:

Dialog1.ShowModal;

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

Cuando aparece MessageBox, a veces no tiene foco y se mueve bajo Dialog1. Los usuarios están confundidos al respecto, dicen: ¡Mi aplicación se congeló! Pero si usan Alt + Tab para moverse a otra aplicación y regresar, el foco vuelve al cuadro de mensaje y será la ventana de primer plano.

Hemos experimentado esto con ShowMessage, MessageBox, formularios normales y también formularios QuickReport.

¿Alguien sabe de esto? ¿Es un error de Windows? ¿Cómo puedes prevenirlo? ¿Cómo atrapar esto?

Gracias por tu ayuda: dd

Realmente dije que DESPUÉS de Win98, por lo que todos los sistemas operativos (Win7 también) se ven afectados por este problema. Utilizamos Delphi 6 Prof, por lo que las propiedades no funcionan con los formularios predeterminados.

Alguien dijo que los cuadros de diálogo de mensajes son controlables con MessageBox + MB_APPLMODAL. Estas son buenas noticias, pero tenemos muchas formas y componentes antiguos, herramientas de terceros.

Por lo tanto, es difícil hacer una aplicación completamente nueva con sustitución de los formularios.

Pero intentaremos hacer esto.

Creo que la respuesta es que este es un problema de mitad de aplicación y mitad de Windows. Si Windows a veces maneja esto y otras no, eso parece ser un error de Windows. Pero si podemos forzar una buena ventana modal, entonces es un error de programación.

¿Alguien puede explicarme cuál es el significado de la bandera WS_POPUP? ¿Tiene algún efecto secundario o no?

Gracias dd