![]() |
Orden formularios
Hola a tod@s.
Sigo intentando hacer que mis formularios no se queden detrás del menú si se pincha en este y después de pruebas con mdi en principio está complicado hacerlo usando esta forma así que se me ha ocurrido intentar hacer que el menú principal esté siempre al fondo de todos los formularios, algo parecido al SendToBack, pero el problema es que el SendToBack lo pasa al fondo de cualquier formulario de cualquier programa abierto y eso tampoco me sirve. Mi pregunta es si hay alguna forma de poner un formulario al fondo de todos los demás formularios del programa, algo parecido al zorder de VB. Gracias y un saludo |
De todas formas, buscando información sobre SendToBack, he encontrado este hilo en Delphi Pages Forum de un programador que parece querer hacer lo mismo que tú. Si necesitas traducción...
|
Cita:
¿No podrías explicar con dibujitos o algo más visual? // Saludos |
Cita:
Cita:
La idea entonces (despues de probar varias cosas sin resultado) es que si pico en el menú el formulario más pequeño no se esconda y si tapa alguna opción del menú que se necesite que obligue a minimizarlo con lo cuál siempre estará visible de alguna forma. Igual es una tontería pero es lo único que se me ocurre. Saludos |
Cita:
Seguiré buscando.... :) |
Según las explicaciones, yo "veo" tu programa así:
![]() Es cuestión de que todas las ventanas no estén en el lugar de la del menú para que no tengas problemas de que no se vean. También puedes mover una ventana, por código, si ves que va a solapar a la del menú, así nunca quedaría ninguna detrás. |
Cita:
|
Cita:
|
Bueno, sería una solución. Si no encuentro la forma de hacer lo que comento probaré a ver como quedaría.
Gracias |
Cita:
¿O quizá se pueden obtener las "z" de las ventanas de tu aplicación y asignarles nuevos valores "z" con SetWindowPos? De nuevo hablo por hablar. |
Cita:
Cita:
|
Cita:
|
Cita:
Ahora, esa idea se puede mejorar usando las llamadas "Desktop bars" que básicamente son como la barra de tareas del Windows, en el sentido de que al maximizar una ventana, por ejemplo, ésta ocupa sólo el área del monitor restante y no puedes colocarle una ventana encima a menos que sea de pantalla completa. Estas "desktop bars" las puedes colocar en cualquier orilla del monitor. // Saludos |
1 Archivos Adjunto(s)
Aquí te pongo un ejemplo de una "desktop bar" a manera de menú. Si tienes delphi7, puedes ejecutar el ejecutable (valga la rebusznancia) así nada mas. Si no, tendrás que compilar.
Mira a ver si es lo que buscas. // Saludos |
El problema es que mi menú ocupa una gran parte del escritorio, si abro un formulario se queda de esta forma:
![]() y si estando de esta manera hago click en cualquier parte del menú el formulario se queda detrás de esta manera: ![]() que es lo que estoy intentando evitar. :) |
Es que eso no es un menú, eso es una ventana a pantalla completa, cualquier cosa que pongas quedará detrás :confused:
|
Cita:
Amigo roman, lo que me propones serviría perfectamente, el problema es que lo veo demasiado espartano para mi gusto. Si lo entendéis mejor de esta manera el resultado que quiero es exactamente como si fueran formularios mdi/child pero con formularios normales. Saludos |
Ok. Ahí te va una aproximación a lo que quieres:
// Saludos |
Newtron, te propongo lo siguiente si donde tienes el menú, ese form lo haces del alto de lo necesario para el menú y el statusbar e inamovible de la posición x,y=0, y luego todas las ventanas las creas normalmente, pero solo evitando, que su posición top, nunca sea inferior a 0+(form del menu.heigh)+1, ten en cuanta que escribo de memoria, de esta manera el menú siempre estará visible, por que las ventanas no podrán superar, el borde inferior del form del menú, claro está este no debe poder ser cambiado de tamaño, cerrado en la x ni movible, aunque si creo que deberías poder minimizar la aplicación y poder restaurarla.
Espero te pueda ser de utilidad.:D:D:D |
De hecho, eso mismo es lo que le propongo con la "desktop bar", pero él quiere el dibujo azul bonito.
// Saludos |
Cita:
|
Gracias José Luis por la idea.
Cita:
|
Cita:
|
Cierto Román, lo que pasa es que no conocia rel termino, ni cai en la cuenta de ello, de todas maneras, lo del fondo bonito que lo ponga en otro form que ocupe el resto de la pantalla, que no se pueda cerrar y que haga lo mismo que el Form del menú, así aunque otros form se abran encima, el menu es independiente, eso pienso yo, por lo menos, pero no me hagais mucho caso.:o:p:rolleyes:
|
Acabo de probar la demo de Román y es aún mejor de lo que yo pensaba, me parece super útil.
|
Cita:
Cita:
Tampoco me sirve porque el programa se convertiría en Modal. Yo quiero poder hacer algo así: ![]() |
Vale, y si alguien pincha en la ventana de menú que está detrás, ¿qué quiéres que haga?, es que creo que no tiene sentido lo que quieres, si pinchas en el menú, por fuerza, debe ponerse delante para hacer lo que quieras hacer con el menú, por lo tanto las ventanas que están delante quedarán detrás, es lógico, ¿qué quiéres hacer con esas ventanas? :confused:
|
Cita:
Ahora, si no quieres usar botoncitos speedbutton entonces puede hacer como dice JoséLuis. Dejas el menú solito en una "desktop bar" y en otro formulario pones tu dibujo. En este formulario pones el código que te puse. Claro, creo que ese formulario tiene otros botoncitos pero es que como dice Casimiro, lo que quieres es imposible: quieres que el usuario pinche un botón al cual no tiene acceso porque no quieres que se monte arriba de lo demás. // Saludos |
Hola newtron.
Como te dije antes, sigo pensando que la opcion más simple es usar MDI... Según la imágen de tu form principal (que ahora veo), hay uno o dos botones y algunos items que ignoro si responden a eventos del mouse pero no parece que ninguno de ellos necesiten capturar el foco del teclado. Si mál no recuerdo tu problema era que los controles ubicados en el área cliente del MDIForm, quedan al frente de la ventana MDIChild abierta (comportamiento normal con MDI y TWinControl). Entonces, una solución es que en lugar de usar descendientes de TWinControl, guardes esos botones e items como imágenes y utilices para mostrarlos unos TImage. De esa forma no tendras problemas de que solapen al MDIChild ya que al ser descendientes de TGraphicControl no tienen handle de ventana y no interferirán con el normal desempeño MDI. Un saludo. |
Vamos a cambiarle el nombre, ahora será Newtron, El Incomprendido :)
|
Creo que ya dec lo dijo una vez: Lo que quiere hacer no se puede, y, además, es imposible.
// Saludos |
Off topic
No es lo mismo:
Cita:
...el pinche usuario que... :D |
|
Cita:
Mi pregunta es: ¿por qué no le das al formulario principal (el que tiene el menú) el estilo fsMDIForm y a los demás el estilo fsMDIChild? Eso le otorgaría a tu aplicación el comportamiento que, pienso yo, estás necesitando. Tú quieres que la aplicación trabaje bajo el modelo MDI, pero con formularios "normales". Pues bien, ¿por qué no nos explicas qué inconvenientes habría si los estableces como fsMDIChild? Varias de las desventajas naturales de este esquema, creo yo, podrían ser salvables. Saludos. |
Cita:
Vos andá tirando las dificultades que se te presenten y desde yá, contá con mi ayuda para que las cosas difíciles no te resulten sencillas. :D Saludos. :) |
Hombre, pero si es mi amigo Calimero :)
Cita:
|
Cita:
Cita:
|
Me gustaría aportar mi granito de arena.
Si no entiendo mal, pretendes realizar una aplicación multiformulario que no sea MDI. Entonces Tu formulario principal se pone delante de todos tapándolos cuando se activa, siendo esto lo que quieres evitar. ¿Es así?. Aunque pienso, coincidiendo con otros, que lo mejor es usar MDI, te propongo este ejemplo de aplicación multiformulario no MDI:
Aunque no me termina de convencer del todo, este ejemplo mantiene al formulario principal, siempre detrás del resto de los formularios de la aplicación. Saludos. |
Perdón :o.
Releyendo el código me he dado cuenta de que deje un gazapo al eliminar partes del código inútil tras realizar pruebas. Como no lo puedo editar, muestro aquí el gazapo y la corrección: Donde dice:
Debe decir:
S es una variable que elimine... Saludos. |
La franja horaria es GMT +2. Ahora son las 12:34:48. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi