Como cambiar la fuente en toda la aplicación

A continuación encontrarás traducido al castellano el artículo escrito por Gabriel Ludosanu y publicado originalmente en el Blog oficial de Xojo.

Mientras que estaba trabajando en uno de mis proyectos necesitaba encontrar una forma rápida de cambiar la fuente utilizada por los controles en toda la aplicación.

Acceder a cada una de las ventanas y actualizar cada uno de sus controles individualmente funciona, pero es realmente tedioso; especialmente cuando se trata de probar varias fuentes o bien añadir nuevos elementos de interfaz de usuario. Por tanto, cree un pequeño módulo que aplica una fuente a todos los controles soportados en una DesktopWindow, incluyendo los controles que se encuentran ubicados en instancias de DesktopContainer.

Module AppWideFont
  Public Sub SetFont(Extends window As DesktopWindow, fontName As String)
    ApplyFontTo(window.Controls, fontName)
  End Sub
 
  Protected Function GetMonospaceFont() As String
    #If TargetWindows
      Return "Cascadia Mono"
    #ElseIf TargetMacOS
      Return "Menlo"
    #ElseIf TargetLinux
      Return "DejaVu Sans Mono"
    #Else
      Return "Courier New"
    #EndIf
  End Function
 
  Private Sub ApplyFontTo(controls As Iterable, fontName As String)
    For Each c As Object In controls
      If c IsA DesktopContainer Then
        ApplyFontTo(DesktopContainer(c).Controls, fontName)
      End If
      
      Select Case c
      Case IsA DesktopLabel
        DesktopLabel(c).FontName = fontName
      Case IsA DesktopTextField
        DesktopTextField(c).FontName = fontName
      Case IsA DesktopTextArea
        DesktopTextArea(c).FontName = fontName
      Case IsA DesktopListBox
        DesktopListBox(c).FontName = fontName
      Case IsA DesktopButton
        DesktopButton(c).FontName = fontName
      Case IsA DesktopCheckBox
        DesktopCheckBox(c).FontName = fontName
      Case IsA DesktopRadioButton
        DesktopRadioButton(c).FontName = fontName
      Case IsA DesktopPopupMenu
        DesktopPopupMenu(c).FontName = fontName
      End Select
    Next
  End Sub
 
End Module

El método SetFont es una extensión de método de modo que se puede llamar directamente desde cualquier DesktopWindow.

Por ejemplo, en el evento Opening de una ventana:

Self.SetFont("Arial")

O si quiero utilizar una fuente monoespaciada:

Self.SetFont(AppWideFont.GetMonospaceFont)

La función GetMonospaceFont es un utilitario que devuelve una fuente monoespaciada adecuada para Windows, macOS o Linux.

El módulo utiliza la colección de controles disponible en una ventana (vía Controls) y comprueba de forma recursiva cualquier control DesktopContainer que pueda contener, de esta forma sólo necesito utilizar una línea de código por ventana. Actualmente puede detectar etiquetas, cambios de texto, áreas de texto, listados, botones, cajas de verificación, botones de radio y menús desplegables.

Si añadiese otro tipo de control más tarde podré ampliar el bloque Select Case con otra comprobación.

Esto me ha ahorrado cambiar de forma constante los ajustes de fuente a lo largo del proyecto y me ha proporcionado una ubicación centralizada para manejar la tipografía de los controles de la aplicación.

Deja un comentario

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