A veces ocurre que el formulario que ejecuta el método Showmodal recibe algún mensaje de Windows justo antes de que se visualice la nueva ventana y por eso se muestra encima de todas las demás. Una forma de evitar este efecto es desactivando la ventana invocadora:
Código Delphi
[-]
procedure TForm2.Button1Click(Sender: TObject);
begin
Self.Enabled := False;
try
Form3.ShowModal;
finally
Self.Enabled := True;
end;
end;
También puede ser que alguno de tus formularios tenga establecida la propiedad FormStyle a fsStayOnTop; Esto afecta el orden de visualización de las ventanas y bajo ciertas circunstancias puede generar el efecto que mencionas.