En Delphi 2009, hago un simple:¿Cómo puedo evitar que FindDialog se mantenga en la cima (Delphi)?
FindDialog.Execute;
La ventana FindDialog permanece encima de la ventana principal de mi programa como debería.
Sin embargo, si abro otra ventana de otro programa sobre la ventana de mi propio programa, la ventana FindDialog permanece en la parte superior de la otra ventana.
Si pruebo esto con un FindDialog de otro programa (por ejemplo, el Bloc de notas), esto no sucede. Abrir la ventana de otro programa sobre el Bloc de notas y su FindDialog cubrirá tanto el Bloc de notas como las ventanas de FindDialog. Este parece ser el comportamiento correcto y esperado.
¿Esto es algo que estoy haciendo mal o es un problema con la forma en que Delphi implementó FindDialog? ¿Hay algo que pueda hacer para que funcione de la manera del Bloc de notas?
Gracias a todos por los comentarios. El hecho de que no puedas reproducir mi problema ya es una pista de que es otra cosa lo que está causando esto. Esto me ayudará a rastrearlo. Investigaré un poco más y publicaré información adicional aquí cuando descubra algo.
Muy interesante. Mi PrintDialog no se mantiene en la parte superior. Todavía no sé por qué mi FindDialog sí lo hace. Todavía investigando ...
Cambié la llamada a: FindDialog.Execute (Handle); Aún en la cima.
que añade otra FindDialog (esta vez FindDialog1) a mi forma principal y ejecutarlo en el inicio de mi programa. Tiene el mismo comportamiento de permanecer en la cima. Eso al menos indica que no tenía nada que ver con mi FindDialog o las personalizaciones que hice para hacer con él. Entonces debe ser un ajuste en mi forma principal.
Parece que no soy el único que ha encontrado esto. Ver: Resource Tuner: Version History que parece ser una aplicación Delphi, donde en la versión 1.99 dice: "Corrección de errores: la ventana de vista previa del diálogo (búsqueda) se mantuvo en la parte superior cuando se cambia a otra aplicación." Podría intentar contactarlos y ver si pueden recordar cuál fue su solución.
añado algunos nuevos diálogos a mi forma y poner estas llamadas en un solo lugar:
FindDialog1.Execute();
PrintDialog1.Execute();
ReplaceDialog1.Execute();
FontDialog1.Execute();
El FindDialog y ReplaceDialog estar al frente de las demás ventanas. PrintDialog y FontDialog no se mantienen en la parte superior y funcionan como deberían.
Entonces, ¿qué hay de diferente entre los dos juegos de diálogos que hacen que los dos primeros lo hagan mal?
Además, este problema ocurre en una versión antigua de mi programa que fue compilado con Delphi 4.
chillidos. Ahora veo que este problema no ocurrió en mi versión anterior que usaba Delphi 4.
Y fue un usuario quien informó este problema. Él usa Windows XP, y estoy desarrollando en Vista, por lo que sucede bajo diferentes sistemas operativos.
Confirmación: Sí, creo un nuevo formulario y agrego un FindDialog en él. FindDialog NO tiene el problema. Esto indica que algo en mi programa está causando que FindDialog permanezca en la parte superior. Ahora, tengo que averiguar qué es eso. ¿Alguna idea más? Si alguien me da una respuesta que incluso me da una pista para ayudarme a resolver esto, entonces obtendrán la respuesta aceptada.
Solución: edición de Sertac a su respuesta me dio la solución:
Application.NormalizeTopMosts;
FindDialog.Execute();
Application.RestoreTopMosts;
De este modo impide la FindDialog de ser TopMost cuando la aplicación no es más alta.
... Pero todavía no lo entiendo (la ayuda de Delphi en NormalizeTopMosts) es muy confuso y no indica que deba hacer esto.
Esperemos que este "arreglo" no cause otros problemas.
No se puede reproducir este (D2009 totalmente actualizada). Se utiliza tanto 'FindDialog1.Execute;' y 'FindDialog1.Execute (.),' Lo que debe tanto no producen ningún mango aprobada en Al abrir el cuadro de diálogo Buscar, a continuación, abra alguna otra aplicación (Bloc de notas en mi caso) y pasar por encima de mi La aplicación Delphi con diálogo, tanto su ventana principal como el diálogo de búsqueda están cubiertos por la ventana del Bloc de notas. –
Podría haber entendido mal algo aquí, pero no puedo reproducirlo en Delphi XE. –
FWIW No puedo reproducir este comportamiento en D2010. ¿Estás pasando un HWND al método Execute? Si no, intente pasar el control del formulario principal y vea si eso ayuda. –