Una de las cosas que nos están pidiendo los usuarios de nuestros programas ultimamente es la posibilidad de modificar el tamaño de la fuente de los mismos. Con el aumento de tamaño de los monitores actuales es perfectamente posible tener una fuente grande para no tener que forzar la vista. Es posible definir en el programa una fuente y un tamaño, pero creo que la manera correcto de hacer esto es que el usuario defina en Windows que fuente y que tamaño quieren usar y que los programas tomen la fuente de la configuracíón de Windows. Además Windows permite usar el sistema de alisado de fuentes ClearType que permite tener una fuente muy nítida en monitores grandes.
Un formulario típico con fuentes pequeñas sería el siguiente:
Para pasar el programa a fuentes grandes, o mejor dicho, para que siempre coja las fuentes del sistema, tenemos que evitar usar tamaños de fuente fijas en nuestro programa y coger la del sistema. En FWH existe la función GetSysFont() que permite coger la fuente del sistema. Contando que al usar fuentes grandes el propio Windows se encarga de redimensionar los diálogos tenemos que nuestro anterior diálogo se ha trasformado en este:
Perfecto, ¿ no ?
Pues no. Usando GetSysFont() cogemos las fuentes del sistema, pero no se el motivo por el cual determinadas partes del formulario no usa el suavizado de fuentes cuando se le pide a Windows que lo haga. Así, si nos fijamos en la imagen de arriba vemos que realmente hay dos tipos de fuentes en el diálogo, una para los GET y otra para los SAY.
Fijándonos en el menú de la aplicación veremos que este sí que usa el suavizado de fuentes, tal como se aprecia en la siguiente imagen:
¿ Que hacer para que la aplicación tome la fuente de Windows con el suavizado ? La solución me la dió mi amigo Paco – gracias otra vez más – y consiste en usar las siguientes funciones:
//___ manejo de fuentes - Paco García 2006 ___________________________________// #pragma BEGINDUMP #include "Windows.h" #include "hbapi.h" HB_FUNC( GETDEFAULTFONTNAME ) { LOGFONT lf; GetObject( ( HFONT ) GetStockObject( DEFAULT_GUI_FONT ) , sizeof( LOGFONT ), &lf ); hb_retc( lf.lfFaceName ); } HB_FUNC( GETDEFAULTFONTHEIGHT ) { LOGFONT lf; GetObject( ( HFONT ) GetStockObject( DEFAULT_GUI_FONT ) , sizeof( LOGFONT ), &lf ); hb_retni( lf.lfHeight ); } #pragma ENDDUMPy en el programa definir de esta manera la fuente de la ventana principal:
::oFont = TFont():New( GetDefaultFontName(), 0, GetDefaultFontHeight(),, )</p>y luego heredar en las ventanas y dialogos del programa esta fuente. Con esto nuestro diálogo queda de esta manera:
donde se ve claramente que ya toma bien la fuente del sistema con el suavizado de bordes.
El último paso para que nuestra aplicación FWH tome bien las fuentes del sistema es modificar las clases de FWH que usan fuentes de paso fijo, como MsgBar, MsgItem y Ttabs para que cojan la fuente de nuestra ventana principal.
Las próximas versiones de nuestros programas ya funcionarán bien con fuentes grandes.
José Luis,
Una estupenda explicación. Muchas gracias por compartirlo, y a Paco también!!
Saludos,
José Luis Capel
PD: ¿como se llama el tema de windows que muestras en las imágenes?
Hola Jose Luis
Gracias por explicacion.
Al igual que a mi amigo Capel, me gustaria saber que tema estas usando en Windows
Salu2
El tema es Luna Element 5, lo cuento en el siguiente post.
Saludos,