Colaboraciones en el Guille

ClearType en Visual Basic 6.0

 

Fecha: 02/Nov/2005 (01/11/2005)
Autor: Gustavo Alegre Hidalgo (gustavoalegre@speedy.com.pe)  

 


Algunos de ustedes se habrán dado cuenta: ¿Porqué las aplicaciones hechas con Visual Basic 6.0 no aceptan el estilo de suavizado ClearType, presente en Windows XP y posteriores? Este nuevo sistema para suavizar fuentes de pantalla permite una mejor visibilidad cuando leemos texto en pantallas LCD, sin embargo cuando cargamos el IDE de Visual Basic 6.0 las fuentes de los formularios no son suavizadas.

Visual Basic utiliza por defecto la fuente "MS Sans Serif" que es del tipo Bitmap (mapa de bits) y no TrueType como Arial o Times New Roman. ClearType sólo puede suavizar fuentes del tipo vectorial (TrueType o PostScript) y no fuentes Bitmap. El tipo de letra "MS Sans Serif" sigue incluido en Windows por razones de compatibilidad con aplicaciones de 16 bits y programas antiguos. A partir de Windows XP se ha incluido un nuevo tipo de letra llamado "Microsoft Sans Serif" que es idéntico a "MS Sans Serif" y a la vez vectorial, por lo tanto puede ser renderizado mediante ClearType. Esta fuente es usada por defecto en el sistema.

Lo sencillo sería ahora cambiar la fuente de todos los controles del formulario por "Microsoft Sans Serif", sin embargo perderíamos compatibilidad en lo que a fuentes se refiere, ya que si ejecutamos nuestra aplicación por ejemplo en Windows 9x (que no tiene por defecto instalada la fuente "Microsoft Sans Serif") entonces sería reemplazada por Times New Roman, lo cual causaría (según mi humilde opinión) un efecto visual desagradable.

Para permitir la compatiblidad es necesario obtener el nombre del tipo de letra predeterminado (que varía según la versión de Windows) y establecerla en nuestros controles. Existen funciones API que permiten obtener la fuente por defecto del sistema y a su vez manipularlas y asignarlas a distintos contoles, sin embargo los controles Label (comunes para mostrar texto) no presentan la propiedad hWnd (requisito indispensable para utilizar APIs).

Sin embargo, desde Windows 95 existe un alias llamado "MS Shell Dlg", que hace referencia a la fuente por defecto del sistema. Puede utilizarse este nombre para que nuestros controles adquieran la fuente predeterminada y por consiguiente, ClearType. Además a partir de Windows XP se ha agregado "MS Shell Dlg 2" que apunta a la fuente Tahoma. Estas pseudo-fuentes no están disponibles en tiempo de diseño ni desde el cuadro de diálogo Fuente.

Utilizar estos alias permiten la compatibilidad con sistemas antiguos, además es muy sencillo de aplicar. Sólo cambiamos la propiedad FontName del control en tiempo de ejecución y listo. Con esta función se puede cambiar fácilmente la fuente a todos los controles de un formulario:

Public Sub CambiarFuente(Formulario As Form)
    'Omitir errores para controles sin la propiedad
    'FontName.
    On Error Resume Next
    
    Dim ElControl As Control
    For Each ElControl In Formulario.Controls
        ElControl.FontName = "MS Shell Dlg"
    Next ElControl
    Set ElControl = Nothing
End Sub

Este procedimiento puede ser llamado desde el evento Form_Load() para actualizar la fuente de los controles antes que se muestre el formulario. Aquí unas capturas para mostrar cómo quedan los formularios.

Formulario VB sin ClearType
Formulario VB con ClearType
Sin ClearType
Con ClearType

Más información sobre ClearType: http://www.microsoft.com/typography/ClearTypeInfo.mspx


Fichero con el código de ejemplo: galegre_ClearTypeVB.zip - 1.62 KB


ir al índice principal del Guille