Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Orden formularios (https://www.clubdelphi.com/foros/showthread.php?t=76372)

newtron 26-10-2011 20:06:55

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

Ñuño Martínez 26-10-2011 20:57:13

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...

roman 26-10-2011 22:06:03

Cita:

Empezado por newtron (Mensaje 416798)
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

A ver, es que yo no acabo de entender qué es lo que quieres. Si no permites que el formulario principal venga al frente, ¿cómo quieres interactuar con él? ¿Que tal que una de las opciones que quieres escoger se encuentra detrás de otro formulario, cómo la escogerías? Y si todas las opciones están en un área no cubierta por otros formularios, ¿qué más te da que venga al frente?

¿No podrías explicar con dibujitos o algo más visual?

// Saludos

newtron 27-10-2011 09:37:47

Cita:

Empezado por Ñuño Martínez (Mensaje 416804)
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...

Gracias, le echaré un vistazo. :)

Cita:

Empezado por roman (Mensaje 416818)
A ver, es que yo no acabo de entender qué es lo que quieres. Si no permites que el formulario principal venga al frente, ¿cómo quieres interactuar con él? ¿Que tal que una de las opciones que quieres escoger se encuentra detrás de otro formulario, cómo la escogerías? Y si todas las opciones están en un área no cubierta por otros formularios, ¿qué más te da que venga al frente?

¿No podrías explicar con dibujitos o algo más visual?

// Saludos

A ver... el tema es que yo uso formularios no modales, entonces si abro un formulario más pequeño que el menú principal y con este abierto pico en el menú de nuevo el formulario abierto más pequeño se esconde detrás de este, espero que "mesentienda" :D.

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

newtron 27-10-2011 09:45:36

Cita:

Empezado por Ñuño Martínez (Mensaje 416804)
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...

Mala suerte, esto hace lo mismo que el SendToBack, se lleva el formulario al fondo de todos los programas abiertos.

Seguiré buscando.... :)

Casimiro Notevi 27-10-2011 10:05:27

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.

newtron 27-10-2011 10:12:57

Cita:

Empezado por Casimiro Notevi (Mensaje 416846)

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.

¿Con mover te refieres a cambiar la posición X,Y?

Casimiro Notevi 27-10-2011 10:20:55

Cita:

Empezado por newtron (Mensaje 416847)
¿Con mover te refieres a cambiar la posición X,Y?

Sí, a eso me refiero, que si una ventana solapa o se queda por completo detrás del menú, tú mismo le cambias su posición para que quede fuera.

newtron 27-10-2011 10:35:04

Bueno, sería una solución. Si no encuentro la forma de hacer lo que comento probaré a ver como quedaría.

Gracias

Ñuño Martínez 27-10-2011 10:46:41

Cita:

Empezado por newtron (Mensaje 416845)
Mala suerte, esto hace lo mismo que el SendToBack, se lleva el formulario al fondo de todos los programas abiertos.

Seguiré buscando.... :)

Leí mal, creo. :o Aun así, ¿ninguno de los parámetros del procedimiento SetWindowPos permite acotar, de alguna forma, que sólo tenga en cuenta las ventanas de la aplicación? No sé, no me he leído la documentation, que estoy vago. :rolleyes:

¿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.

newtron 27-10-2011 10:50:22

Cita:

Empezado por Ñuño Martínez (Mensaje 416852)
Leí mal, creo. :o Aun así, ¿ninguno de los parámetros del procedimiento SetWindowPos permite acotar, de alguna forma

Ya he pensado en eso, tengo que buscar información sobre ese procedimiento.

Cita:

Empezado por Ñuño Martínez (Mensaje 416852)
¿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.

Esa es la idea original, y la pregunta del millón es ¿cómo? :D

Casimiro Notevi 27-10-2011 11:34:16

Cita:

Empezado por newtron (Mensaje 416853)
Esa es la idea original, y la pregunta del millón es ¿cómo? :D

Si te refieres a la posición de cada una para ordenarlas, puede servirte la propiedad 'tag' de cada una, sé que tengo algo hecho de hace muchos años que lo implementaba así, a ver si lo encuentro.

roman 27-10-2011 18:08:44

Cita:

Empezado por newtron (Mensaje 416844)
si abro un formulario más pequeño que el menú principal y con este abierto pico en el menú de nuevo el formulario abierto más pequeño se esconde detrás de este, espero que "mesentienda"

Es que esto es lo que yo no entiendo. ¿Por qué tienes un formulario más pequeño que el menú? Si es un menú, entonces debería de ser como lo pinta Casimiro, osease como sucede con el mismísimo delphi, que tiene el formulario principal con la barra de componentes hasta arriba del monitor y, aunque sí es posible colocar otro formulario encima, por lo general nunca se estorban, precisamente porque ese menú es chiquito.

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

roman 27-10-2011 18:46:23

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

newtron 27-10-2011 18:48:53

El problema es que mi menú ocupa una gran parte del escritorio, si abro un formulario se queda de esta forma:

Uploaded with ImageShack.us

y si estando de esta manera hago click en cualquier parte del menú el formulario se queda detrás de esta manera:

Uploaded with ImageShack.us

que es lo que estoy intentando evitar. :)

Casimiro Notevi 27-10-2011 19:19:53

Es que eso no es un menú, eso es una ventana a pantalla completa, cualquier cosa que pongas quedará detrás :confused:

newtron 27-10-2011 19:29:07

Cita:

Empezado por Casimiro Notevi (Mensaje 416928)
Es que eso no es un menú, eso es una ventana a pantalla completa, cualquier cosa que pongas quedará detrás :confused:

Pues por eso quiero que el menú se quede detrás de los formularios.... es duro esto de ser un incomprendido. :p

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

roman 27-10-2011 19:37:36

Ok. Ahí te va una aproximación a lo que quieres:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure WMMouseActivate(var Message: TWMMouseActivate); message WM_MOUSEACTIVATE;
  end;

implementation

procedure TForm1.WMMouseActivate(var Message: TWMMouseActivate);
begin
  Message.Result := MA_NOACTIVATE;
end;

// Saludos

José Luis Garcí 27-10-2011 19:49:13

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

roman 27-10-2011 19:56:13

De hecho, eso mismo es lo que le propongo con la "desktop bar", pero él quiere el dibujo azul bonito.

// Saludos


La franja horaria es GMT +2. Ahora son las 07:59:56.

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