Estimados usuarios de Xailer,
Los formulario de Xailer tienen una propiedad de nombre lCentered que permite indicar si la ventana ha de mostrarse centrada o no. El centrado se produce con la totalidad de la pantalla y si el usuario tiene dos monitores, se centro en el monitor donde se está ejecutando la aplicación. No obstante, están proliferando monitores cada vez más grandes y sobre todo más anchos y la visualización centrada en el monitor puede no ser la correcta.
Os vamos a mostrar un pequeño truco, -que además servirá para entender algo más la sobrecarga de clases de Xailer-, para centrar la ventana sobre su formulario padre. Este es el código:
CLASS TForm FROM XForm
METHOD Show( nCmdShow, lCenter )
END CLASS
METHOD Show( nCmdShow, lCenter ) CLASS TForm
LOCAL nDifW, nDifH
DEFAULT lCenter TO ::lCentered
IF lCenter .AND. ::oParent:IsKindOf( "TForm" )
nDifW := Max( (::oParent:nWidth - ::nWidth) / 2, 0 )
nDifH := Max( (::oParent:nHeight - ::nHeight) / 2, 0 )
::nLeft := ::oParent:nLeft + nDifW
::nTop := ::oParent:nTop + nDifH
ENDIF
::Super:Show( nCmdShow, .f. )
RETURN Nil
Basta con poner este código en cualquier parte de su código y a partir de entonces los formularios que tengan la propiedad lCentered a verdadero se mostrarán centrados respecto a su formulario padre y no con respecto al monitor. Espero que os haya gustado.
Un saludo
Muy bueno pero como se puede hacer para que no se pinte primero en la posición centrada del monitor y luego salte al centrado del form principal. Queda un poco feo el salto.
Sólo hay que poner el método ::Super:Show() después del cálculo de coordenadas. Ya está corregido en el artículo.
Saludos
Se puede hacer aparte que este centrado este quede fijo es decir que el usuario no pueda moverlo?
ah y tambien se puede desactivar el boton restaurar es decir el que trae dos ventanitas asi como pueden desactivarse los de cerrar y minimizar?