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