FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Dividir formulario proporcionalmente
Hola,
Estoy realizando un formulario con varios TChart y algun TPanel y me me gustaria poder dividir el formulario en parte totalmente proporcionales, y que cuando se redimensione el formulario se redimensionen todas las partes del mismo. Por ejemplo, un formulario que esta divido en 4 partes iguales y en cada parte tenga un TChart. La pregunta es, ¿se puede hacer esto con las propiedades tipicas de Aling? ¿hay que usar algun otro componente? En otras ocaciones he realizado formularios que se redimensionan con TDBGrid y TPanel, y me ha bastado con los colocar las propiedades Aling correctamente. En este caso no consigo el resultado que deseo de proporcionalidad.
__________________
Saludos, Bitman |
#2
|
|||
|
|||
Esto ya se ha tratado más de una vez en el foro. Busca antes de preguntar algo nuevo.
Estoy seguro que alguien te comentará que te leas la guía de estilo. En cuanto a lo referente a tu pregunta, revísate este enlace: http://www.clubdelphi.com/foros/showthread.php?t=66263 En concreto necesitarás usar estos dos métodos y poner la propiedad Align a alCustom. function CustomAlignInsertBefore( C1, C2: TControl): Boolean; override; procedure CustomAlignPosition(Control: TControl; var NewLeft, NewTop, NewWidth, NewHeight: Integer; var AlignRect: TRect; AlignInfo: TAlignInfo); override; ambos sobreescritos en el formulario. Un saludo, LoPiTaL |
#3
|
|||
|
|||
Cita:
De todas formas gracias!
__________________
Saludos, Bitman |
#4
|
||||
|
||||
Cita:
Para este caso en especial, se me ocurrió algo aprovechando el evento OnCanResize del form. Un ejemplo usando cuatro TPanels: Los TChart podrías ubicarlos en cada TPanel con su propiedad Aligng = alClient. Espero te sirva o te dé alguna idea... Un saludo
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
|||
|
|||
Cita:
Cita:
Me parece el lugar más adecuado el OnCustomAlignInsertBefore y OnCustomAlignPosition, que son los eventos pensados para esto (no sé a partir de qué versión de Delphi están published, pero en todo caso, siempre puedes sobreescribir los métodos que comenté antes). Un saludo, LoPiTaL |
#6
|
||||
|
||||
Cita:
Si, hay que darle valores iniciales a los paneles ya sea por código o situándolos visualmente. Pero como aclaré en mi mensaje "Para este caso en especial,...", el código no tiene pretenciones de ser una solución global sino una respuesta a un planteo concreto. Es decir, funciona para cuatro panels que dividen el form exactamente en cuatro partes iguales distribuidas en forma de mosaico y se redimensionan acorde al tamaño del form. Que fué lo que interpreté que buscaba Toni. Un saludo. Edito: Para no dejarle a Toni una respuesta incompleta, el órden visual del ejemplo es: Panel1 - Panel3 Panel2 - Panel4 O desde código:
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 18-11-2011 a las 18:37:00. |
#7
|
||||
|
||||
Hola LoPiTaL.
Estuve probando otra vez con el método CustomAlignPosition (ya que antes no encontré como lograrlo ) y como muchas veces pasa, lo que no salía antes salió después... Para 4 Panels(propiedad Align = alCustom) en mosaico, redimensionables:
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 18-11-2011 a las 20:02:54. |
#8
|
|||
|
|||
OK, muchas gracias a los dos. Las dos soluciones funcionan perfectamente.
__________________
Saludos, Bitman |
#9
|
|||
|
|||
Cita:
Sólo apuntar un detalle más a tu solución (que funciona perfectamente): Así hay que vigilar el orden de creación de los componentes. Ya que por lo general se crean en este orden Panel1, Panel2, Panel3, Panel4, entonces el método directamente es correcto. PERO si quisieses poner el Panel2 primero (por el motivo que sea), entonces necesitarías sobreescribir el otro método, OnCustomAlignInsertBefore, para poder indicar, cuando salga la pareja PanelX - Panel2, que quieres que alinee primero el panel2, ya que si no, las instrucciones:
no funcionarán, ya que cuando alinea Panel1, Panel2 todavía no tiene el Width y Height que tocan. Y respondiendo a la pregunta que os estáis haciendo: sí, me ha tocado pelearme muuuuuuuuuchhooooo con estos dos métodos... Un saludo, LoPiTaL |
#10
|
||||
|
||||
Cita:
Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 18-11-2011 a las 21:06:27. |
#11
|
|||
|
|||
Pues la complicacion no acaba ahi.....este formulario no solo se divide en 4, sino que tiene un TabControl con varios Tabs y estos Tabs se dividen en cuatro (no todos). Pero bueno es mas de lo mismo.
Lo que si que quiero es implementar que al redimensionar el formulario lo haga de forma proporcional, para que las graficas que hay en cada division no se vean feas y mal formadas. A trabajar un poco mas....y el problema es que contra reloj. Gracias por la ayuda!
__________________
Saludos, Bitman |
#12
|
||||
|
||||
No sé desde que versión de Delphi está disponible, pero hay un exelente control para este menester. El TGridPanel. Si tienes alguna de las más recientes versiones de Delphi puedes probarlo a ver si lo tienes.
Saludos, Chris |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema al dividir 1 | Drake | JAVA | 2 | 27-10-2010 19:05:07 |
Dividir el detail | omy | Impresión | 7 | 23-11-2007 22:29:32 |
Dividir un reporte | fedelphi | Impresión | 2 | 02-04-2006 19:37:12 |
dividir una celda en 3... | eli.vidal | Impresión | 5 | 18-11-2005 14:02:27 |
Dividir un campo | Petolansa | Conexión con bases de datos | 2 | 11-08-2005 12:27:55 |
|