FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Cambiar comportamiento de Align
Hola a todos.
Tengo un ligero problemilla con la propiedad align de los formularios / paneles etc... y es que me gustaría que no pusiese primero los componentes con alineamiento alTop y alBottom, sino que pusiese primero los alLeft / alRight, ya que me gustaría que: un panel que tengo en el lateral ocupase todo el formulario de arriba a abajo, y que el que está arriba ocupe sólo lo que a este le sobre; y no que el que está en la parte de arriba ocupe toda la pantalla de izda a derecha y que el que está al lado ocupe sólo lo que le sobra al otro. No me sirve usar "alNone" para el de arriba y ajustarlo a mano con las anchors y tal, ya que estoy haciendo una aplicación MDI y con docking, y si pongo alNone el panel se me queda "flotando" y ni el MDI ni el dock me lo detectan. Se agradece cualquier sugerencia. Un saludo, LoPiTaL |
#2
|
||||
|
||||
Pues hay que meter un panel de relleno (si lo he entendido bien).
En el centro añade un panel con alClient, y dentro de éste, añade otro más llamado "arriba" con align alTop. (izq, dcho, centro, arriba son todos paneles) izq.align := alLeft; dcho.align := alright; centro.align := alClient; << este panel es de relleno centro.arriba.align := alTop; <<
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
|||
|
|||
Gracias por la respuesta. Esta solución es válida para solucionar el problema que expongo, del alineamiento. También funciona perfectamente el docking.
Sin embargo, las ventanas MDI se me quedan por detrás del panel, quedándose invisibles.He probado a darles el Parent=Panel y tampoco hace nada. He probado a usar JvPanel (que puede ser transparente), pero tampoco funciona.Sería una solución buena si pudiese hacer que las ventanas MDI no estuviesen limitadas a estar en la parte "Client" del formulario, sino que pudiesen estar en la parte "Client" de cualquier otro componente, en este caso del panel. ¿Se os ocurre alguna otra cosa? Un saludo, LoPiTaL |
#4
|
||||
|
||||
Hola,
Yo he logrado algo como esto: No sé si es lo que quieres. Para ello, redefino el método CustoAlignPosition del formulario:
Panel1 tiene alineación alLeft, Panel2 alRight y Panel3 alCustom. Esto último es importante porque si no, no se llama al método CustomAlignPosition. Lo malo es que la posición y tamaño iniciales del formulario hijo no se ajustan al área sobrante y tienes que moverlo tú mismo. // Saludos |
#5
|
|||
|
|||
Hola otra vez!! Tu solución funciona a la perfección Román, sólo que hay que hacer una pequeña modificación:
Tenéis toda la info referente a lo que voy a contar aquí http://www.marteens.com/trick49.htm (quitad los dos espacios, que no sé por qué, me dice que aún no tengo permitido poner enlaces ni imágenes....) Con alCustom no sólo se llama el método que tú indicas, sino que se llama también el de CustomAlignInsertBefore. Éste sirve para ordenar los componentes con alCustom y poder decidir cuál se pinta primero y cuál después. En mi caso, no hace falta llamarlo dado que sólo tengo un componente con alCustom. Con lo referente al otro método, CustomAlignPosition, sí es capaz de modificar el área de cliente, quedando las MDI perfectamente posicionadas sin tener que hacer nada más. Para ello se utiliza el parámetro AlignRect, que tiene el rectángulo del área sobrante (área cliente). Al final mi método quedó así (no hago diferenciación sobre quién es Control, ya que sólo tengo uno; si tuviese más de uno, con esta implementación, todos tendrían un pseudo-alTop, uno debajo del otro sin solaparse): AlignRect: rectángulo que queda libre para alinear componentes. Una vez todos están colocados, es el que se utiliza para alClient. Control: control que se está alineando en este momento. NewXXX: dimensiones del componente. Inicialmente las que tuviese en tiempo de diseño o antes de llamar a esta función. Se pueden modificar para redimensionar el componente. AlignInfo: información de alineamiento. Contiene una lista con todos los alCustom, el índice del Control actual, el tipo de alineación que tiene (alCustom siempre..) y otro parámetro Scratch que creo que no se utiliza para nada aunque no estoy seguro. Así, el resto de posibles paneles con alCustom recibirán el Rect modificado y se pintarán sin sobreponerse sobre ningún otro, y lo más importante, el espacio sobrante de AlignRect es el utilizado finalmente para alClient (o en mi caso para las MDI) Muchas gracias de nuevo, Un saludo, LoPiTaL Última edición por LoPiTaL fecha: 10-02-2010 a las 18:29:56. |
#6
|
||||
|
||||
Hola,
Pues qué gusto que ya lo hayas resuelto y agradezco el enlace que pones, que está muy interesante. Por cierto, ya corregí el enlace. A partir de tu próximo mensaje ya podrás ponerlos tú mismo. Tenemos la restricción de diez mensajes para evitar el SPAM. También te recomiendo que uses las etiquetas [code] o [delphi] para poner tu código, para que quede bien indentado y coloreado. // Saludos |
#7
|
|||
|
|||
Ok, gracias. Ya he corregido lo del código.
Un saludo, LoPiTaL |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Propiedad align | xanxov | Lazarus, FreePascal, Kylix, etc. | 3 | 06-02-2009 17:33:54 |
Align en Printer.Canvas | principiante22 | Impresión | 1 | 18-12-2008 17:29:51 |
Quickreport, qrmemo autostrech i qrdbtext align bottom | rafa_adrim | Impresión | 1 | 05-06-2007 16:55:09 |
Comportamiento de bde con oracle 10 g | opsi | Conexión con bases de datos | 4 | 27-09-2006 22:32:47 |
Controlar la propiedad Align de dos derivados de TControl.. | pvizcay | Varios | 2 | 05-07-2006 01:49:34 |
|