Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
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
__________________
Be water my friend.
Responder Con Cita
  #2  
Antiguo 26-10-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 27-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
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....
__________________
Be water my friend.
Responder Con Cita
  #4  
Antiguo 27-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #5  
Antiguo 27-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje

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?
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 27-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
¿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.
Responder Con Cita
  #7  
Antiguo 27-10-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
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. 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.

¿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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #8  
Antiguo 27-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Leí mal, creo. 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 Ver Mensaje
¿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?
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 27-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
Esa es la idea original, y la pregunta del millón es ¿cómo?
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.
Responder Con Cita
  #10  
Antiguo 26-10-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por newtron Ver Mensaje
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
Responder Con Cita
  #11  
Antiguo 27-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
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 Ver Mensaje
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" .

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
__________________
Be water my friend.
Responder Con Cita
  #12  
Antiguo 27-10-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por newtron Ver Mensaje
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
Responder Con Cita
  #13  
Antiguo 27-10-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Archivos Adjuntos
Tipo de Archivo: zip AppBar.zip (9,7 KB, 22 visitas)
Responder Con Cita
  #14  
Antiguo 27-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
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.
__________________
Be water my friend.
Responder Con Cita
  #15  
Antiguo 27-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que eso no es un menú, eso es una ventana a pantalla completa, cualquier cosa que pongas quedará detrás
Responder Con Cita
  #16  
Antiguo 10-03-2013
ricardopl65 ricardopl65 is offline
Miembro
 
Registrado: nov 2008
Posts: 25
Poder: 0
ricardopl65 Va por buen camino
Intenta esto

Se me ocurre que puedes poner esto en el formulario que tiene el menu


Código Delphi [-]
protected     
procedure CreateParams(var Params: TCreateParams); override;  

 procedure TMiForm.CreateParams(var Params: TCreateParams);
 begin   
inherited CreateParams(Params);  
with Params do   
begin     
ExStyle := ExStyle or WS_EX_NOACTIVATE;     
WndParent := GetDesktopwindow;   
end;


De esta manera el formulario nunca gana el foco, es decir no se activa
Responder Con Cita
  #17  
Antiguo 10-03-2013
alsn alsn is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 20
Poder: 0
alsn Va por buen camino
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
Responder Con Cita
  #18  
Antiguo 10-03-2013
ricardopl65 ricardopl65 is offline
Miembro
 
Registrado: nov 2008
Posts: 25
Poder: 0
ricardopl65 Va por buen camino
Pues acabo de volver a probarlo y a mi me funciona.
Prueba este dpr:
Archivos Adjuntos
Tipo de Archivo: zip formdetras.zip (2,3 KB, 11 visitas)
Responder Con Cita
  #19  
Antiguo 10-03-2013
alsn alsn is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 20
Poder: 0
alsn Va por buen camino
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.
Responder Con Cita
  #20  
Antiguo 12-03-2013
alsn alsn is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 20
Poder: 0
alsn Va por buen camino
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:

Código Delphi [-]
const
  SWW_hParent = -8;

 ...

SetWindowLong(FormFlotante.Handle, SWW_hParent, FormPadre.Handle)


Esta forma permite más posibilidades, como crear una jerarquía de ventanas.

Ejemplo:

Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
const
  SWW_hParent = -8;
begin
  SetWindowLong(Form2.Handle,SWW_hParent,Form1.Handle);
  Form2.Show;

  SetWindowLong(Form3.Handle,SWW_hParent,Form2.Handle);
  Form3.Show;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Orden formularios newtron Varios 10 06-10-2011 14:03:37
Paneles en Orden ...... Efren2006 OOP 9 11-06-2010 12:36:02
Splash screen ,o splashscreen ,o form o ventana de inicio ,o orden de formularios Peterman C++ Builder 2 29-05-2007 19:46:22
Orden en TIBDataset barman Conexión con bases de datos 6 27-11-2003 10:40:25
Orden en TIBDataset barman Firebird e Interbase 6 24-11-2003 21:26:00


La franja horaria es GMT +2. Ahora son las 09:24:35.


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
Copyright 1996-2007 Club Delphi