Você está na página 1de 13

- VB.

NET -
Criando um Editor de textos

Neste exerccio vamos criar um editor de textos no VB .NET com o objetivo de mostrar como implementar
algumas funcionalidades que vo usar alguns dos novos recursos presentes no VB .NET.
Neste exerccio vamos aprender como:
1. Usar o controle Toolbar
2. Usar o controle Imagelist
3. Criar um menu de contexto
4. Usar os controles SaveFileDialog e OpenFileDialog
5. Implementar a impresso
6. Usar os recursos de visualizar impresso no VB.NET
1 - Inicie um novo projeto no Visual Studio.NET com as seguintes caractersticas (sinta-se a vontade para
alterar a seu gosto.)
1. Project Types: Visual Basic Projects
2. Templates: Windows Application
3. Name: EditorNet
4. Location: c:\pasta aluno\vbnet\EditorNet
Nota: Como vamos usar os namespaces System.IO e System.Drawing.Printing . As duas primeiras linhas do
seu projeto devero ser as seguintes:
Imports System.IO
Imports
System.Drawing.Printing
Na classe do projeto devemos declarar o objeto StringtReader e ativar eventos para o formulrio. Usaremos
estes recursos na visualizao da impresso e impresso do texto.
Dim leitor As StringReader
Friend WithEvents Form1 As
System.Windows.Forms.Form
No formulrio padro - form1.vb - vamos incluir os seguintes controles:
1. RichTextBox
2. Toolbar
3. ImageList
4. SaveDialog
5. OpenDialog
A aparncia inicial do nosso projeto dever ser a da figura abaixo:

Note os componentes:
SaveFileDialog1 , OpenFileDialog1 e
ImageList1 inseridos no formulrio.
Vamos agora alterar algumas propriedades dos controles inseridos. Vamos comear com o formulrio.
Altere suas propriedades conforme a seguir:
Categoria Propriedade Valor Finalidade
Appearence Text
Super Editor
.NET
Alterar o texto do titulo do
formulrio
Appearence Backcolor Gray
Alterar a cor de fundo do
formulrio
Design Name EditorNet
Definir o nome do
formulrio
Layout StartPosition CenterScreen Centralizar o formulrio
Os controles ToolBar e ImageList so usados em conjuntos para podermos criar um menu com imagens.
As imagens so definidas no controle ImageList; vamos usar o nome padro - ImageList1 - e definir as
imagens conforme abaixo:

Selecione o controle e
pressione F4;

Selecione na categoria
Appearance a
propriedade Images e
clique em Collection;

Para incluir uma imagem
clique no boto - Add e
selecione a imagem que
desejar

Vamos agora configurar o controle ToolBar . Selecione em Properties na categoria Behavior a propriedade
Buttons e clique em Collections ; a seguir configure o controle conforme a seguir:

- Voc deve clicar
no boto Add e a
seguir configurar as
propriedades:
Name
ImageIndex
Style
- Criamos 10
botes com Style
do tipo PushButton
e 5 botes do tipo
Separator
Para vincular as imagens aos botes definidos na ToolBar defina propriedade ImageList da categoria
Behavior igual ao nome do nosso controle ImageList : ImageList1. (Feito isto as imagens iro ser exibidas
nos buttons criados.)
No controle RichTextBox1 altere o nome do controle para rtbEditor e altere a propriedade Text para um
valor nulo , e a propriedade AutoWordSelection para True.

Categoria Propriedade Valor Finalidade
Appearence Text
deixar em
branco
Alterar o texto padro
exibido no controle
Design Name rtbEditor
Definir o nome do
controle RichTextBox
Behavior AutoWordSelection True
Ativa a seleo
automtica de palavras
Vamos configurar o controle OpenFileDialog1 assim :
Categoria Propriedade Valor Finalidade
Design Name FileDialogNet
Define o nome
do controle
Misc DefaultExtension rtf
Define a
extenso padro
Misc Filter
(*.rtf)|*.rtf|Todos
os Arquivos
(*.*)|*.*
Define o filtro
para os arquivos
Misc InitialDirectory c:\arquivos
Define o
diretrio padro
Vamos configurar o controle SaveFileDialog1 assim :
Categoria Propriedade Valor Finalidade
Design Name SaveDialogNet
Define o nome do
controle
Misc DefaultExtension rtf
Define a extenso
padro
Misc Filter
(*.rtf)|*.rtf|Todos
os Arquivos
(*.*)|*.*
Define o filtro
para os arquivos
Misc InitialDirectory c:\arquivos
Define o diretrio
padro
Misc FileName arquivo
Define o nome do
arquivo
A aparncia do seu projeto dever ser parecida com a da figura abaixo:

- Os botes inseridos no projeto tm
as seguintes funcionalidades:
1. Novo
2. Abrir
3. Salvar
4. Copiar
5. Colar
6. Negrito
7. Itlico
8. Sublinhado
9. Visualizar Impresso
10. Imprimir
11. Ajuda
12. Sair
Agora vamos criar o cdigo referente a cada funcionalidade relacionada a cada boto. Vamos criar os
procedimento e depois relacion-las a cada boto da Toolbar.
- O cdigo do para criar um novo arquivo. Note a sintaxe da caixa de mensagem MessageBox.
Private Sub Novo()
If RichTextBox1.Text <>"" Then
If (MessageBox.Show("Deseja Salvar o arquivo ?", "Salvar Arquivo",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) =
DialogResult.Yes) Then
Salvar_arquivo()
End If
End If
RichTextBox1.Clear()
RichTextBox1.Focus()
End Sub
- Cdigo para Abrir um arquivo existente.
Private Sub Abrir_Arquivos()

If Me.FileDialogNet.ShowDialog() =
DialogResult.OK Then
Dim fs As New
FileStream(FileDialogNet.FileName,
FileMode.Open, FileAccess.Read)
Dim m_streamReader As New
StreamReader(fs)

' L o arquivo usando a classe
StreamReader
m_streamReader.BaseStream.Seek(0,
SeekOrigin.Begin)

' L cada linha do stream at a ltima
Me.RichTextBox1.Text =""

Dim strLine As String =
m_streamReader.ReadLine()

While Not (strLine Is Nothing)
Me.RichTextBox1.Text +=
strLine +ControlChars.Lf
strLine =
m_streamReader.ReadLine()
End While

' Fecha o stream
m_streamReader.Close()
End If
End Sub
- cdigo para Salvar o arquivo. Estou usando a classe Stream.
Private Sub Salvar_arquivo()

Try
' Pega o nome do arquivo para salvar
If Me.SaveDialogNet.ShowDialog() =
DialogResult.OK Then

' abre um stream para escrita e cria um
StreamWriter para implementar o stream
Dim fs As New
FileStream(SaveDialogNet.FileName,
FileMode.OpenOrCreate, FileAccess.Write)
Dim m_streamWriter As New StreamWriter(fs)
m_streamWriter.Flush()

' Escreve para o arquivo usando a classe
StreamWriter
m_streamWriter.BaseStream.Seek(0,
SeekOrigin.Begin)
' escreve no controle richtextbox
m_streamWriter.Write(Me.RichTextBox1.Text)
' fecha o arquivo
m_streamWriter.Flush()
m_streamWriter.Close()
End If
Catch em As Exception
MsgBox("Erro a salvar o arquivo ",
MsgBoxStyle.Critical, "Erro ao Salvar")
End Try
End Sub

- A seguir o cdigo para aplicar Negrito, Itlico e Sublinhado. (O cdigo quase idntico). Cada efeito
aplicado somente sobre o texto que for selecionado ( RichTextBox1.SelectionFont ).



Private Sub Negritar()
Dim nome_fonte As String
Dim tamanho_fonte As Single
Dim negrito As Boolean

nome_fonte =RichTextBox1.Font.Name
tamanho_fonte =
RichTextBox1.Font.Size
negrito =RichTextBox1.Font.Bold

If negrito =False Then
RichTextBox1.SelectionFont = New
Font(nome_fonte, tamanho_fonte,
FontStyle.Bold)
Else
RichTextBox1.SelectionFont = New
Font(nome_fonte, tamanho_fonte,
FontStyle.Regular)
End If
End Sub

Private Sub Italico()

Dim nome_fonte As String
Dim tamanho_fonte As Single
Dim italico As Boolean

nome_fonte =RichTextBox1.Font.Name
tamanho_fonte =RichTextBox1.Font.Size
italico =RichTextBox1.Font.Italic

If italico =False Then
RichTextBox1.SelectionFont = New
Font(nome_fonte, tamanho_fonte,
FontStyle.Italic)
Else
RichTextBox1.SelectionFont = New
Font(nome_fonte, tamanho_fonte,
FontStyle.Italic)
End If
End Sub

Private Sub Sublinhar()

Dim nome_fonte As String
Dim tamanho_fonte As Single
Dim sublinha As Boolean

nome_fonte =RichTextBox1.Font.Name
tamanho_fonte =RichTextBox1.Font.Size
sublinha =RichTextBox1.Font.Underline

If sublinha =False Then
RichTextBox1.SelectionFont = New
Font(nome_fonte, tamanho_fonte,
FontStyle.Underline)
Else
RichTextBox1.SelectionFont = New
Font(nome_fonte, tamanho_fonte,
FontStyle.Underline)
End If
End Sub
Para incluir as funcionalidades de visualizao de impresso e de impresso devemos fazer o seguinte:
Insira os seguintes componentes da barra de ferramentas :(veja
figura ao lado)
PrintDocument
PrintPreviewDialog
Abaixo vemos os dois componentes junto com os componentes
j includos no projeto:

Para saber mais detalhes sobre os componentes leia o artigo:
VB .NET - Impresso e Visualizao. O que h de novo ?

Para ativar o recurso de visualizar a impresso devemos primeiro escrever o cdigo para imprimir o texto no
evento PrintPage do objeto PrintDocument. Note que o procedimento PrintDocument1_PrintPage possui
argumento do tipo PrintPageEventArgs que chamamos de texto. A seguir temos o cdigo:





Private Sub PrintDocument1_PrintPage(ByVal
sender As System.Object, ByVal texto As
System.Drawing.Printing.PrintPageEventArgs)
Handles PrintDocument1.PrintPage

Dim linhasPorPagina As Single =0
Dim Posicao_Y As Single =0
Dim contador As Integer =0
Dim MargemEsquerda As Single =
texto.MarginBounds.Left
Dim MargemSuperior As Single =
texto.MarginBounds.Top
Dim linha As String =Nothing
Dim FonteDeImpressao As Font =
Me.RichTextBox1.Font
Dim meupincel As New SolidBrush(Color.Black)

'Calcula o numero de linhas por pgina usando as
medidas das margens
linhasPorPagina = texto.MarginBounds.Height /
FonteDeImpressao.GetHeight(texto.Graphics)

' Vamos imprimiri cada linha implementando um
StringReader
linha =leitor.ReadLine()

While contador <linhasPorPagina
' calcula a posicao da proxima linha baseado na
altura da fonte de acordo com o dispostivo de
impressao
Posicao_Y = (MargemSuperior + (contador *
FonteDeImpressao.GetHeight(texto.Graphics)))

' desenha a proxima linha no controle richtext
texto.Graphics.DrawString(linha,
FonteDeImpressao, meupincel, MargemEsquerda,
Posicao_Y, New StringFormat())

contador +=1
linha =leitor.ReadLine()
End While
' se existir mais linhas imprimi outra pgina
If Not (linha Is Nothing) Then
texto.HasMorePages =True
Else
texto.HasMorePages =False
End If
meupincel.Dispose()
End Sub
- Primeiro calculamos o nmero de linhas por pgina par podermos controlar a impresso. Usamos as
medidas das margens do documento e o tamanho da fonte usada na impresso para fazer este clculo.
linhasPorPagina =texto.MarginBounds.Height / FonteDeImpressao.GetHeight(texto.Graphics)
- Implementamos um StringReader para ler cada linha do texto ; Usando um lao While imprimimos linha
por linha e incrementamos o contador de linha , verificando se o numero de linhas impresso maior que o
nmero de linhas por pgina.
While contador <linhasPorPagina
' calcula a posicao da proxima linha baseado na
altura da fonte de acordo com o dispostivo de
impressao
Posicao_Y = (MargemSuperior + (contador *
FonteDeImpressao.GetHeight(texto.Graphics)))

' desenha a proxima linha no controle richtext
texto.Graphics.DrawString(linha,
FonteDeImpressao, meupincel, MargemEsquerda,
Posicao_Y, New StringFormat())

contador +=1
linha =leitor.ReadLine()
End While
Agora devemos definir o procedimento que ir permitir visualizar a impresso. No cdigo abaixo temos a
rotina pronta. Definimos que janela de visualizao ser maximizada e que
Private Sub visualiza()
'visualiza a impressao
Try
Dim strTexto As String =
Me.RichTextBox1.Text

leitor =New StringReader(strTexto)

Dim printPreviewDialog1 As New
PrintPreviewDialog()

With printPreviewDialog1
.Document =Me.PrintDocument1
.Text ="Macoratti - Visualizando a
impresso"
.WindowState =
FormWindowState.Maximized
.PrintPreviewControl.Zoom =1
.FormBorderStyle =
FormBorderStyle.Fixed3D
.ShowDialog()
End With
Catch exp As Exception
MsgBox(exp.Message.ToString,
MsgBoxStyle.Critical, "Erro na
visualizao da impresso")
End Try
End Sub
Executando o projeto, carregando um texto e ativando a visualizao iremos obter:


Vamos imprimir. Para imprimir o documento vamos inserir o componente PrintDialog no nosso projeto.
Aps fazer isto basta incluir o seguinte cdigo na sua rotina que ir ativar a impresso. Ao lado a imagem
que mostra a janela imprimir exibida pelo cdigo.

Private Sub imprimir()

printDialog1.Document =
PrintDocument1

Dim strTexto As String =
Me.RichTextBox1.Text
leitor = New
StringReader(strTexto)

If
printDialog1.ShowDialog() =
DialogResult.OK Then
Me.PrintDocument1.Print()

End If

End Sub

Vamos ativar a funcionalidade do boto - Ajuda. Na verdade iremos inserir um novo formulrio e nele
iremos exibir o nome do sistema, uma imagem e um link para ser acesso via web. A primeira coisa a fazer e
inserir o formulrio - form2.vb - no menu Project - opo - Add Windows Forms.
No formulrio inserido vamos incluir os seguintes controles: GroupBox , Label e LinkLabel. Abaixo temos
a visualizao do formulrio e o cdigo do evento Click do controle LinkLabel e do formulrio:

O cdigo relacionado ao boto LinkLabel o
seguinte :
Private Sub LinkLabel1_LinkClicked(ByVal
sender As System.Object, ByVal e As
System.Windows.Forms.LinkLabelLinkClickedE
ventArgs) Handles LinkLabel1.LinkClicked
LinkLabel1.LinkVisited =True
'ativa o metodo Process.Start para abrir o
navegador padro com a url
System.Diagnostics.Process.Start("http://www.ma
coratti.net")
End Sub

Cdigo ativado quando o usurio clicar no
formulrio:
Private Sub Form2_Click(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
MyBase.Click
Me.Close()
End Sub

Quando o usurio clicar no link est usando o mtodo start do objeto Process para abrir o navegador com a
url indicada.
S falta mostrar as opes Copiar e Colar. Antes disto eu vou mostrar como o cdigo que dispara cada
rotina associado aos botes do menu:
Private Sub ToolBar1_ButtonClick(ByVal sender As
System.Object, ByVal e As
System.Windows.Forms.ToolBarButtonClickEventArgs)
Handles ToolBar1.ButtonClick
Dim botao As Object

botao =e.Button

Select Case ToolBar1.Buttons.IndexOf(e.Button)
Case 0
Novo()
Case 1
Abrir_Arquivos()
Case 2
Salvar_arquivo()
Case 4
'copiar
Case 5
'colar
Case 7
Negritar()
Case 8
Italico()
Case 9
Sublinhar()
Case 11
visualiza()
Case 12
imprimir()
Case 14
ajuda()
Case 16
Application.Exit()
End Select
End Sub
Vamos agora ao cdigo do boto - Copiar - que permite copiar partes dos textos selecionados , bem
simples:
Private Sub copiar()

If RichTextBox1.SelectionLength >
0 Then
RichTextBox1.Copy()
End If
End Sub
Agora o cdigo do boto - Colar - que permite o texto selecionado:
Private Sub copiar()
RichTextBox1.Paste()
End Sub
Acabamos de criar um editor de texto, simples na verdade, mas que abre qualquer tipo de arquivo e que
possui alguns recursos.
Voc pode melhorar o editor com mais recursos. Use sua criatividade e bom estudo.

Você também pode gostar