 VB
.NET - Exibindo as fontes instaladas no sistema
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.zip / exibirFontes.zip
Eu sei é apenas VB .NET, mas eu
gosto...
José Carlos Macoratti