.NET - Exibindo as fontes instaladas no sistema e usando fontes customizadas


 Nesta dica eu vou mostrar como podemos exibir as fontes instaladas no sistema e como usar fontes de terceiros não instaladas, usando as linguagens VB .NET e C#.

A classe InstalledFontCollection esta presente no namespace  System.Drawing.Text, é uma classe que não pode ser herdada e contém a funcionalidade de representar as fontes instaladas no sistema local. Você pode usar essa classe e retornar um array contendo os nomes de todas as fontes em seu sistema.

A classe InstalledFontCollection herda da classe base abstrata FontCollection e você pode usar o objeto InstalledFontCollection para enumerar as fontes instaladas em seu computador.

Nota: Uma classe abstrata é uma classe que não pode ser instanciada e funciona como uma classe base para outras classes.

A propriedade Families do objeto InstalledFontCollection é um array de objetos FontFamily que representa uma família de fontes relacionadas

Recursos usados:

Criando o projeto no Visual Studio 2013 Express for windows desktop

Abra o VS 2013 Express for windows desktop e clique em New Project;

Selecione a linguagem Visual Basic e o template Windows Forms Application;

Informe o nome ListaFontesInstaladas e clique no botão OK;

Formulário principal do projeto form1.vb inclua os seguinte controles a partir da ToolBox:

Disponha os controles no formulário form1.vb conforme o leiaute abaixo:

Agora defina o seguinte namespace no formulário form1:

Imports System.Drawing.Text

A seguir inclua no evento Click do botão de comando - Carregar Fontes Instaladas - o código abaixo:

Imports System.Drawing.Text
Public Class Form1
    Private Sub btnFontesInstaladas_Click(sender As Object, e As EventArgs) Handles btnFontesInstaladas.Click
        Dim fontes As InstalledFontCollection = New InstalledFontCollection()
        lblinfo.Text = fontes.Families.Count & " fontes instaladas"
        Try
            For Each font As FontFamily In fontes.Families
                lbFontes.Items.Add(font.Name)
            Next font
        Catch ex As Exception
            MessageBox.Show("Erro  :" & ex.Message)
        End Try
    End Sub
End Class

A seguir temos a versão do código para a linguagem C# :

using System.Drawing.Text;
public class Form1
{
	private void btnFontesInstaladas_Click(object sender, EventArgs e)
	{
		InstalledFontCollection fontes = new InstalledFontCollection();
		lblinfo.Text = fontes.Families.Count + " fontes instaladas";
		try {
			foreach (FontFamily font in fontes.Families) 
                                {
				lbFontes.Items.Add(font.Name);
			}
		   } 
           	     catch (Exception ex)
                        {
			MessageBox.Show("Erro  :" + ex.Message);
	      	  }
	}
}

Executando o projeto iremos obter o seguinte resultado:

   

Usando uma fonte não instalada

Além das fontes instaladas no seu sistema você pode usar outra fonte criada por profissionais em seu programa. Neste caso você tem que atentar para o fato de que se a fonte não estiver instalada no seu sistema o Windows irá tentar usar uma fonte ja instalada com as características parecidas com a fonte, e, o resultado pode não ser o esperado.

Felizmente podemos adicionar fontes de forma dinâmica em nosso projeto e para isso tudo o que você tem que fazer e adicionar o arquivo da fonte em seu programa. Você não precisa nem mesmo instalar a fonte no sistema.

Usando os recursos da classe PrivateFontCollection podemos trabalhar com fontes customizadas. Essa classe fornece um conjunto de famílias de fontes criados a partir de arquivos de fontes que são fornecidos pelo aplicativo cliente.

A primeira coisa que você deve fazer é obter a fonte que deseja usar no seu projeto.

Vejamos um exemplo...

A primeira coisa que você tem que fazer é escolher uma fonte.

Nesse site -  http://www.fontpalace.com/ - você vai encontrar fontes grátis. Para usar basta escolher uma fonte, baixar o arquivo e armazená-lo em seu computador.

Eu vou usar a fonte PUSSYFOO.TTF que foi baixada do site acima e que esta armazenada na pasta c:\dados.

A seguir vamos incluir um novo formulário no projeto a partir do menu PROJECT -> Add Windows Forms.

Aceite o nome form2.vb e a seguir inclua no formulário dois controles Label a partir da TOOLBOX com os nomes Label1 e Label2.

Defina um texto qualquer nos controles Labels conforme mostra a figura abaixo:

Agora defina o seguinte namespace no form2:

Imports System.Drawing.Text

Agora no evento Load ou no evento Paint do formulário inclua o código abaixo:

  Private Sub Form2_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        Dim pfc As New PrivateFontCollection()

        pfc.AddFontFile("c:\dados\PUSSYFOO.ttf")

        Label1.Font = New Font(pfc.Families(0), 28, FontStyle.Regular)
        Label2.Font = New Font(pfc.Families(0), 20, FontStyle.Regular)
    End Sub

Abaixo a versão para C#:

private void Form2_Paint(object sender, PaintEventArgs e)
{
	PrivateFontCollection pfc = new PrivateFontCollection();
	pfc.AddFontFile("c:\\dados\\PUSSYFOO.ttf");
	Label1.Font = new Font(pfc.Families(0), 28, FontStyle.Regular);
	Label2.Font = new Font(pfc.Families(0), 20, FontStyle.Regular);
}

Execute o projeto e veja o resultado:

Você pode definir mais detalhes na fonte customizada como cor, tamanho, etc.

Vejamos ume exemplo onde vamos usar a mesma fonte customizada e os recursos do objeto Graphics para escrever um texto no formulário.

Vamos então incluir um novo formulário no projeto a partir do menu PROJECT -> Add Windows Forms.

Aceite o nome form3.vb para o formulário.

Agora defina o seguinte namespace no form3:

Imports System.Drawing.Text

A seguir inclua o código abaixo no evento Paint do formulário form3:

    Private Sub Form3_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        Dim contador As Integer = 0
        Dim nomeFamilia As String = ""
        Dim fonteFamilias() As FontFamily
        Dim fonteColecao As New PrivateFontCollection
        fonteColecao.AddFontFile("c:\dados\pussyfoo.ttf")
        fonteFamilias = fonteColecao.Families
        contador = fonteFamilias.Length
        nomeFamilia = fonteFamilias(0).Name
        Dim ff As FontFamily = New FontFamily(nomeFamilia, fonteColecao)
        Dim f As New Font(ff, 72, FontStyle.Regular)
        e.Graphics.DrawString("Macoratti", f, Brushes.Blue, 150, 20)
        e.Graphics.DrawString("Quase", f, Brushes.Red, 70, 120)
        e.Graphics.DrawString("Tudo para VB", f, Brushes.Green, 5, 220)
    End Sub

 

A versão C# :

private void Form3_Paint(object sender, PaintEventArgs e)
{
	int contador = 0;
	string nomeFamilia = "";
	FontFamily[] fonteFamilias = null;
	PrivateFontCollection fonteColecao = new PrivateFontCollection();
	fonteColecao.AddFontFile("c:\\dados\\pussyfoo.ttf");
	fonteFamilias = fonteColecao.Families;
	contador = fonteFamilias.Length;
	nomeFamilia = fonteFamilias(0).Name;
	FontFamily ff = new FontFamily(nomeFamilia, fonteColecao);
	Font f = new Font(ff, 72, FontStyle.Regular);
	e.Graphics.DrawString("Macoratti", f, Brushes.Blue, 150, 20);
	e.Graphics.DrawString("Quase", f, Brushes.Red, 70, 120);
	e.Graphics.DrawString("Tudo para VB", f, Brushes.Green, 5, 220);
}  

Executando o projeto iremos obter o resultado abaixo:

Nota: Para executar o formulário apropriado altere o Startup Form na janela de propriedades do projeto.

Pegue o projeto completo aqui:  ListaFontesInstaladas.zip

Bendito seja o Deus e Pai de nosso Senhor Jesus Cristo que, segundo a sua grande misericórdia, nos gerou de novo para uma viva esperança, pela ressurreição de Jesus Cristo dentre os mortos,
Para uma herança incorruptível, incontaminável, e que não se pode murchar, guardada nos céus para vós,

1 Pedro 1:3,4

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti