![]() |
Corregido :)
|
Cita:
Saludos. |
Gracias escafandra. Parece que tú has sido el único con la sensibilidad suficiente para entender mis penas. :D
"Bucearé" en tu código y te cuento. Gracias de nuevo y un saludo |
Cita:
:D |
Amigo escafandra.
El ejemplo que me has propuesto hace más de lo que yo necesitaba, he usado la parte del código que mantiene el formulario principal al fondo de los demás y me sirve a la perfección, era lo que estaba buscando (aunque os parezca raro, bueno, yo es que soy un tío raro :p). Cita:
Gracias a todos por vuestra atención y un saludo. |
A ver, no entiendo. Yo iba por el mismo camino que escafandra (aunque no tan completo)
Cita:
Me siento ofendido, ja, ja :D // Saludos |
Cita:
Esta segunda si permite accionar el menú pero tiene un efecto visual un poco "raro" en PCs mas antiguos. :) Saludos. |
¡Ah! Ok. Entonces la parte del MouseActivate sale sobrando ¿no?
¿Cuál es el efecto raro en pcs viejos? // Saludos |
Cita:
Cita:
Saludos. |
Cita:
La razón de no usar mdi es porque yo uso un formulario propio que necesita crearse y asignarle una serie de propiedades antes de hacer el show, con los formularios mdi se ejecuta el show en el momento de crearlos. No sé si esto lo hubiera podido solucionar pero este y otros problemas los vería duros de resolver, era más fácil buscar la solución al tema de los menús. |
Amigo escafandra.
Esto se ha quedado estupendamente pero hay un pequeño detalle que rompe mi "paz interior" y es que si tengo un formulario abierto encima del menú y minimizo el menú, al volver a maximizarlo el formulario se queda detrás del menú. ¿Hay forma de arreglar eso? Gracias y un saludo. |
Una pregunta newtron, porque no pones una variable, que antes de entrar en el menu, o sea al peder el active un Form, grave el nombre del form, con lo cual al salir de la acción del menu abra el form guardado en la variable, vamos es una idea.
|
Cita:
Gracias y un saludo |
Cita:
Con el ejemplo que he usado eso no ocurre :confused:, es posible que no te entienda bien o que tengas incluidas cosas en tu código distintas a las mías. Saludos. |
Solucionado.
El problema es que tenía ya redireccionado los mensajes del programa y no podía usar tu código tal cuál entonces puse la instrucción para pasar el formulario principal al fondo en el evento "activate" pero claro, este evento no se dispara al volver al formulario después de minimizarlo, he capturado el evento OnRestore y ahí si que me funciona. Gracias y un saludo |
Si quieres simplificarte, no trabajes con los eventos VCL, captura el mensaje WM_WINDOWPOSCHANGED con un procedimiento tal que así:
Sería el equivalente al código que anteriormente puse, sólo que lo hice en el WndProc(var Message: TMessage); para manejar varios mensajes en un sólo procedimiento. Saludos. |
Estupendo.
Gracias. :) |
Hola, ya sé que este hilo es muy antiguo, pero es que un enlace reciente de Newtron me ha llevado hasta aquí.
No sé si entiendo bien lo que Newtron quería, pero ¿No hubiera bastado con dejar el formulario principal (llamado menú) con su propiedad FormStyle en fsNormal y establecer esa propiedad en fsStayOnTop para todos los demás formularios? Un saludo |
Intenta esto
Se me ocurre que puedes poner esto en el formulario que tiene el menu
De esta manera el formulario nunca gana el foco, es decir no se activa |
Hola Ricardo, el código que pones no impide que el formulario principal menú adquiera el foco. Por lo menos en las pruebas que he hecho. De todas formas, lo que creo que buscaba Newtron es que el formulario principal no se colocara por encima de los demás formularios de la aplicación, tapandolos, pero que sí mantuviera su capacidad de uso.
Ya encontraron una solución satisfactoria. Si he resubido el hilo (con más de un año) es porque tenía la impresión de que eso mismo se podía conseguir de una manera más simple. Un saludo |
1 Archivos Adjunto(s)
Pues acabo de volver a probarlo y a mi me funciona.
Prueba este dpr: |
Sigue sin funcionarme. Igual es la versión de Delphi. Para poder probarlo, he tenido que quitar en los "uses" todas las referencias: "Winapi." "Vcl." "System." ya que no las reconocía, y eliminar entonces los uses dobles que quedaban.
|
Hay un truco, que conozco desde mi época de Visual Basic, para crear ventanas flotantes (tipo barras de herramientas de Office), que consistiría en:
Esta forma permite más posibilidades, como crear una jerarquía de ventanas. Ejemplo:
|
Algo más sencillo que puedes usar en las nuevas versiones de Delphi
Establece la propiedad PopupMode del formulario a pmAuto y por último, crea el formulario superior como hijo directo del formulario padre/principal. Por ejemplo:
Saludos! Enlaces: Propiedad PopupMode. WS_POPUP (Para versiones de Delphi que no traen la propiedad PopupMode de TCustomForm. |
Sí, es eso mismo. Incluso se puede establecer la propiedad PopupMode por código a posteriori:
Aunque no se comporta exactamente igual. Me explico, con el siguiente código:
El Form3 se comporta como si fuese hijo del Form2, no del Form1. Y no entiendo por qué. Saludos! |
Cita:
Cita:
Saludos. PD.: Probá estableciendo la propiedad PopupMode en tiempo de diseño exclusivamente. |
También lo había probado así, por si fuera eso.
Saludos! |
A ver, si hago lo siguiente:
Sí se comportan de la manera esperada. Pero, estando en el mismo procedimiento se comportan como he dicho anteriormente. Saludos |
Pues a mi me funciona
Al menos en XE2 funciona con el ejemplo que te di. Mira este video a ver si se acerca a lo que quieres.
http://www.ricardoplaza.com/download/formdetras.mp4 |
Efectivamente, es eso Ricardo. En el uso de CreateParams me funcionan, por ejemplo, los códigos de esta página:
http://delphi.about.com/od/formsdialogs/l/aa073101b.htm Pero con WS_EX_NOACTIVATE no marcha en mi caso. Un saludo |
que sistema operativo tienes? versión de delphi?
|
Lo he probado en una máquina virtual con Windows XP y Turbo Delphi.
No me dedico a la programación, es más bien una afición. Aunque en alguna ocasión le he sacado provecho. |
deberias probar con un windows real y un delphi completo, a ver que tal, seguro ese es el problema
|
Cita:
Cita:
Saludos! |
Así sí se puede elegir el formulario padre de manera precisa.
Muchas gracias! |
| La franja horaria es GMT +2. Ahora son las 02:07:56. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi