Ver Mensaje Individual
  #5  
Antiguo 10-02-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Reputación: 18
LoPiTaL Va por buen camino
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):

Código Delphi [-]
procedure TForm1.CustomAlignPosition(Control: TControl; var NewLeft,
NewTop, NewWidth, NewHeight: Integer; var AlignRect: TRect;
AlignInfo: TAlignInfo);
begin
inherited;
NewLeft := AlignRect.Left; //Nos ponemos en el borde más a la izda que podamos.
NewTop := AlignRect.Top; //Nos ponemos lo más arriba que podamos
NewWidth := AlignRect.Right-AlignRect.Left; //Tomamos todo el ancho de la aplicación.
//Hacemos más pequeño el rectángulo de alineamiento para que las ventanas MDI se pinten en la zona correcta.
Inc(AlignRect.Top,NewHeight);
end;
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.
Responder Con Cita