VB .NET - Exibindo as fontes instaladas no sistema


Como exibir as fontes instaladas no sistema ?

Elementar, apenas crie uma nova instância da classe System.Drawing.Text.InstalledFontCollection que contém uma coleção dos objetos FontFamily que representam todas as fontes instaladas no sistema.

A classe InstalledFontCollection permite que você obtenha informações sobre as fontes atualmente instaladas através da propriedade Familes. Esta propriedade é fornecida pela classe abstrata FontCollection da qual deriva a classe InstalledFontCollection.

Não use a classe InstalledFontCollection para instalar uma fonte para o Windows. Em vez disso, use a função GDIAddFontResource. Um objeto InstalledFontCollection vê apenas fontes que são instaladas no Windows antes que o objeto seja criado.

Vejamos a seguir um exemplo que mostra como obter as fontes instaladas.

Abra o Visual Basic 2008 Express Edition e crie um novo projeto do tipo Windows Application com o nome fontesInstaladas:

Notou que eu estou usando o VB 2008 Express em Português ???

Isso mesmo !!! você pode portar o Visual Studio 2008 e as versões Express para o idioma Português. Baixe o pacote para tradução em :

http://msdn.microsoft.com/pt-br/express/default.aspx

Agora você não pode mais alegar que tem dificuldades com a língua para aprender Vb usando as versões Express que são gratuitas e estão agora traduzidas para o Português.

No formulário padrão form1.vb inclua um controle Panel e um controle Button conforme o leiaute abaixo:

Vamos definir os seguintes namespaces usados no projeto:

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Text

No evento Click do botão de comando inclua o código abaixo que já esta comentado:

Private Sub btnCarregarFontes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregarFontes.Click
        ' Cria a coleção de Fontes
        Using fontFamilies As New InstalledFontCollection
            ' Efetua a iteração sbre todas as familias de fontes
            Dim offset As Integer = 10
            For Each family As FontFamily In fontFamilies.Families
                Try
                    ' Cria uma label que irá exibir o texto da fonte
                    Dim fontLabel As New Label
                    fontLabel.Text = family.Name
                    fontLabel.Font = New Font(family, 14)
                    fontLabel.Left = 10
                    fontLabel.Width = pnlFonts.Width
                    fontLabel.Top = offset
                    ' Inclui a label no controle Panel
                    pnlFonts.Controls.Add(fontLabel)
                    offset += 30
                Catch ex As ArgumentException
                    ' Uma exceção ArgumentException será lançada se a fonte selecionada
                    ' não susportar o estilo regular(o padrão quando da criação do objeto font)
                    Dim fontLabel As New Label
                    fontLabel.Text = ex.Message
                    fontLabel.Font = New Font("Arial", 10, FontStyle.Italic)
                    fontLabel.ForeColor = Color.Red
                    fontLabel.Left = 10
                    fontLabel.Width = 500
                    fontLabel.Top = offset
                    ' inclui a labe no Panel.
                    pnlFonts.Controls.Add(fontLabel)
                    offset += 30
                End Try
            Next
        End Using
    End Sub

Abaixo temos o mesmo código em C#:

 ' Cria a coleção de Fontes
        Using fontFamilies As New InstalledFontCollection
            ' Efetua a iteração sbre todas as familias de fontes
            Dim offset As Integer = 10
            For Each family As FontFamily In fontFamilies.Families
                Try
                    ' Cria uma label que irá exibir o texto da fonte
                    Dim fontLabel As New Label
                    fontLabel.Text = family.Name
                    fontLabel.Font = New Font(family, 14)
                    fontLabel.Left = 10
                    fontLabel.Width = pnlFonts.Width
                    fontLabel.Top = offset
                    ' Inclui a label no controle Panel
                    pnlFonts.Controls.Add(fontLabel)
                    offset += 30
                Catch ex As ArgumentException
                    ' Uma exceção ArgumentException será lançada se a fonte selecionada
                    ' não susportar o estilo regular(o padrão quando da criação do objeto font)
                    Dim fontLabel As New Label
                    fontLabel.Text = ex.Message
                    fontLabel.Font = New Font("Arial", 10, FontStyle.Italic)
                    fontLabel.ForeColor = Color.Red
                    fontLabel.Left = 10
                    fontLabel.Width = 500
                    fontLabel.Top = offset
                    ' inclui a label no Panel.
                    pnlFonts.Controls.Add(fontLabel)
                    offset += 30
                End Try
            Next
        End Using

Executando o projeto iremos obter:

A seguir vamos usar os mesmos recursos para criar uma aplicação que exibe as fontes instaladas e permite a configuração de algumas de suas propriedades como tamanho e tipo e estilo.

Crie uma nova aplicação no Visual Basic 2008 Express Edition do tipo Windows Application com o nome exibirFontes;

Declare o seguinte namespace no projeto: Imports System.Drawing.Text

A seguir no formulário padrão form1.vb inclua os seguintes controles : ListBox, TextBox e CheckBox conforme o leiaute abaixo:

No evento Load do formulário vamos carregar as fontes instaladas e exibi-las no controle ListBox - lstFonte , usando o código abaixo:

   ' carrega a lista de fontes.
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fontes_instaladas As New InstalledFontCollection
        lstFonte.Items.Clear()
        For Each fonte_familia As FontFamily In fontes_instaladas.Families
            lstFonte.Items.Add(fonte_familia.Name)
        Next fonte_familia
        lstFonte.SelectedIndex = 0
    End Sub

Se o usuário alterar o valor do tamanho da fonte no TextBox - txtTamanho - vamos exibir a fonte no novo tamanho chamando a rotina exibirFonte():

  ' ao selecionar uma nova fonte muda a fonte.
    Private Sub txtTamanho_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTamanho.TextChanged, _
chkBold.Click, chkItalic.Click, chkUnderline.Click, chkStrikeout.Click, lstFonte.SelectedIndexChanged
        exibirFonte()
    End Sub

Na rotina a seguir estamos exibindo a fonte e verificando se houve a seleção de algum controle CheckBox para aplicar o estilo marcado:

' Exibe a fonte selecionada.
    Private Sub exibirFonte()
        ' Compoõe o estilo da fonte
        Dim estilo_fonte As FontStyle = FontStyle.Regular
        If chkBold.Checked Then estilo_fonte = estilo_fonte Or FontStyle.Bold
        If chkItalic.Checked Then estilo_fonte = estilo_fonte Or FontStyle.Italic
        If chkUnderline.Checked Then estilo_fonte = estilo_fonte Or FontStyle.Underline
        If chkStrikeout.Checked Then estilo_fonte = estilo_fonte Or FontStyle.Strikeout

        ' Obtem o tamanho da fonte
        Dim tamanho_fonte As Single = 8
        Try
            tamanho_fonte = Single.Parse(txtSize.Text)
        Catch ex As Exception
        End Try

        ' Obtem a familia da fonte
        Dim familia_nome As String = "Times New Roman"
        If Not (lstFonte.SelectedItem Is Nothing) Then
            familia_nome = lstFonte.SelectedItem.ToString
        End If
        ' Cria a nova fonte
        Dim nova_fonte As New Font(familia_nome, tamanho_fonte, estilo_fonte)

        ' define a fonte
        txtFonte.Font = nova_fonte
    End Sub

Executando o projeto e marcando algumas opções temos:

E dessa forma podemos tratar as fontes instaladas usando o VB .NET.

Para saber mais:

A classe Font define um formato particular para o texto tal como o tipo da fonte, tamanho e atributos de estilo.

Para criar uma fonte podemos usar o construtor font e inicializar uma nova instância da classe fonte com os atributos especificados:

public Sub Font(string, float)

A declaração abaixo Inicializa uma nova instância da classe Font para a Fonte e o estilo especificado.

Public Sub Font(ByVal Font, ByVal FontStyle)

onde FontStyle é uma enumeração o qual inclui os valores : Bold, Italic, Regular, StrikeOut, e Underline.

Vejamos um exemplo a seguir:

Dim g As Graphics
Dim
font As New Font("Times New Roman", 26)

A seguir temos uma lista das propriedades mais usadas:

Bold Obtém um valor que indica se a fonte é bold.(negrito)
FontFamily Obtém  a FontFamily  da fonte.
Height Obtém  a altura da fonte
Italic Obtém  a valor que indica se a fonte é Italic.
Name Obtém  o nome da face  fonte
Size Obtém  o tamanho da fonte.
SizeInPoints Obtém  o tamanho, em points , da fonte.
Strikeout Obtém  um valor que indica se a fonte é strikeout.
Style Obtém  a informação do estilo da fonte;
Underline Obtém  um valor indicando se a fonte é sublinhada(underlined)
Unit Obtém  a unidade de medida da fonte.

Pegue o projeto completo aqui: fontesInstaladas.zipexibirFontes.zip

Eu sei é apenas VB .NET, mas eu gosto...


José Carlos Macoratti