Centrado de ventanas

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

 

4 comentarios en “Centrado de ventanas

  1. Bingen

    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.

    Responder
  2. iozuniga Autor

    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

    Responder
  3. Alfred LT.

    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?

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *