Visual Basic 6 - Usando controle Rich TextBox


Já precisou trabalhar com textos formatados no Visual Basic ?

Se você tentou fazer isto usando o controle TextBox deve ter se sentido frustrado , não é mesmo ?

Afinal o TextBox não apresenta nenhum recurso nativo para ser usado na formatação de textos .

Agora vem uma boa notícia : O Visual Basic possui o controle Rich TextBox que possui recursos para formatação de textos. Dá até para criar um editor de textos com recursos de formatação de fontes , cor , indentação , sobrescrito , subescrito , negrito , sublinhado, etc...

Este artigo vai ser dividido em duas partes.

Na primeira vou mostrar os recursos que o controle Rich TextBox possui e na segunda parte vou fazer a aplicação da teoria em um projeto onde iremos armazenar o texto formatado em um banco de dados.

Introdução

Com o controle Rich TextBox é muito fácil criar textos formatados. A primeira coisa que você vai precisar fazer para usar o controle no seu projeto é fazer uma referência ao controle no seu projeto e incluir o componente no formulário do seu projeto.

No menu Project->Components selecione o componente : Microsoft Rich TextBox Control 6.0

 

O controle RichTextBox abre e salva arquivos no formato RTF e no formato ASCII (txt). Para abrir e salvar arquivos usamos os métodos LoadFile e SaveFile.

LoadFile - Abre um arquivo RTF ou TXT em um controle RichTextBox.

object.LoadFile pathname, filetype

Parte Descrição
object O objeto referência para o controle RichTextBox
pathname Define o caminho e o nome do arquivo que será aberto no controle.
filetype Um inteiro ou constante que especifica o tipo de arquivo que vai ser carregado.

Os valores possíveis para filetype são:

Constante Valor Descrição
rtfRTF 0 RTF.(padrão). O arquivo deve ser um arquivo RTF válido.
rtfText 1 Text. O controle irá carregar qualquer arquivo texto válido.

SaveFile - Salva o conteúdo de um controle RichTextBox em um arquivo.

object.SaveFile(pathname, filetype)

A sintaxe é idêntica ao do comando LoadFile.

Formatação Básica

Vejamos agora as propriedades básicas para formatação do controle RichTextBox.

As propriedades : SelBold , SelItalic , SelStrikeThru e SelUnderline , retornam ou definem o estilo da fonte para o texto atualmente selecionado em um controle RichTextBox.

Object.SelBold = Valor
Object.SelItalic = Valor
Object.SelUnderline = Valor
Object.SelStrikethru = Valor

Onde Valor pode assumir os valores :

Valor Descrição
Null A seleção contém caracteres que possuem mais de um valor definido para o estilo da fonte.
True Todos os caracteres selecionados assumem o valor do estilo definido para a fonte.
False (Padrão). Nenhum dos caracteres selecionados assumem o valor do estilo definido para a fonte.

Para testar estas propriedades vamos criar um pequeno projeto no VB , inserir o componente RichTextBox conforme abaixo, onde temos o código e layout do formulário do projeto:

Private Sub chkNegrito_Click()
   rich1.SelBold = chknegrito.Value
End Sub
Private Sub chkItalico_Click()
   rich1.SelItalic = chkitalico.Value
End Sub
Private Sub chkSublinhado_Click()
   rich1.SelUnderline = chksublinhado.Value
End Sub
Private Sub chktachado_Click()
   rich1.SelStrikeThru = chktachado.Value
End Sub
Private Sub Form_Load()
   rich1.SelLength = 30
End Sub
Obs: rich1 é o nome do controle RichTextBox usado.

- Mudando a fonte , o tamanho e a cor da fonte

SelFontName é a propriedade usada para atribuir ou mudar da fonte em um controle RichTextBox para os caracteres selecionados. A sintaxe é :

object.SelFontName [= string]

Onde temos:

Parte Descrição
object O objeto referência para o controle RichTextBox.
string Expressão que indica a fonte instalada no sistema que será usada.

SelFontSize é a propriedade usada para atribuir ou mudar o tamanho da fonte em um controle RichTextBox para os caracteres selecionados. A sintaxe é :

object.SelFontSize [= points]

Onde temos:

Parte Descrição
object O objeto referência para o controle RichTextBox.
points Um valor inteiro que indica o tamanho em points da fonte para o texto atualmente selecionado.

Obs: Em geral você deve mudar o nome da fonte antes de atribuir o tamanho. O tamanho máximo é 2160 points. lembrando que as fontes disponíveis dependem da sua configuração do sistema, monitor e impressora.

Exemplo: Abaixo duas formas atribuir fonte e tamanho de fonte via código

RichTextBox1.SelFontName = "Times New Roman"
RichTextBox1.SelFontSize = 12

Dim fonte as String
Dim tamanho as integer

fonte = "Verdana"
tamanho= 12

RichTextBox1.SelFontName = fonte
RichTextBox1.SelFontSize = tamanho

Acrescentando as opções para seleção de fonte e tamanho no projeto anterior teremos o seguinte layout e código :

Private Sub Form_Load()
 rich1.SelLength = 30
 For i = 0 To Screen.FontCount - 1
   cbofonte.AddItem Screen.Fonts(i)
 Next i
 For i = 8 To 20
   cbotamanho.AddItem i
 Next
 cbofonte.ListIndex = 0
 cbotamanho.ListIndex = 0
End Sub
código que carrega as combobox com as fontee e tamanhos
Private Sub cbofonte_Click()
   If cbofonte.Text = "" Then Exit Sub
   rich1.SelFontName = cbofonte.Text
End Sub

Código que selecione a fonte e atribui ao texto 

Private Sub cbotamanho_Click()
   If cbotamanho.Text = "" Then Exit Sub
   rich1.SelFontSize = cbotamanho.Text
End Sub
Código que seleciona o tamanho da fonte e atribui ao texto

- Inserindo Texto

Para inserir texto no control Rich TextBox usas as propriedades : SelLength, SelStart e SelText.

  1. SelLength - retorna ou define o número de caracteres selecionados.Sintaxe: object.SelLength [= number]
  2. SelStart - retorna ou define a posição inicial do texto selecionado. Sintaxe: object.SelStart [= index]
  3. SelText - retorna ou define a string que contém o texto selecionado.Sintaxe: object.SelText [= value]

onde temos:

Parte Descrição
object O objeto referência para o controle RichTextBox
number Uma expressão numérica que especifica o número de caracteres selecinados..
index Uma expressão numérica que especifíca a posição inicial do texto selecionado.
value Uma expressão string que contém, o texto selecionado.

- Alterando a cor do texto

Para alterar a cor de um texto selecionado usamos a propriedade : SelColor

object.SelColor [= color]

onde temos:

Parte Descrição
object O objeto referência para o controle RichTextBox
color Um valor que define uma cor.

Color pode assumir os seguintes valores:

Valor Descrição
Null O texto contém uma mistura de diferentes valores para cores.
RGB colors As cores são definidas nos valores das funções RGB ou QBColor.
System Cores definidas com as constantes de cores do sistema na livraria de objetos do Visual Basic.

Incluindo mais esta funcionalidade no exemplo anterior teremos o seguinte layout e código:

Private Sub cmdcor_Click()
CommonDialog1.ShowColor
rich1.SelColor = CommonDialog1.Color

End Sub

Incluimos o componente - Microsoft Common Dialog Control e o botão de comando cmdcor

- usando indentação e marcadores

Podemos usar parágrafos indentados , subindentados e marcadores no controle RichTextBox. As propriedades usadas para obter estes efeitos são:

  1. SelIndent - Define a distância entre a margem esquerda do controle e a margem esquerda do texto selecionado. object.SelIndent [= integer]
  2. SelHangingIndent - Define a distância entre a margem esquerda da primeira linha do texto e a margem esquerda das demais linhas do mesmo parágrafo. object.SelHangingIndent [= integer]
  3. SelRighIndent - Define a distância entre a margem direita do controle e margem direita do texto selecionado. object.SelRightIndent [= integer]
  4. SelBullet - retorna ou define um valor que determina se um parágrafo selecionado possuirá um marcador. object.SelBullet [= value]

Os valores definidos para estas propriedades dependem da definiçãoda propriedade ScaleMode do container do controle RichTextBox. Assim se o controle estiver em um formulário e propriedade ScaleMode do formulário estiver definida como igual a 7 - centimeter os valores estarão em centimetros.

Abaixo um exemplo de utilização das propriedades: (rtfdados é o nome do controle RichTextBox)

Private Sub Command2_Click()
rtfdados.SelIndent = Val(Text1)
rtfdados.SelHangingIndent = Val(Text2)

End Sub
Código para Indentação
Private Sub Check1_Click()
If Check1.Value = Checked Then
rtfdados.SelBullet = True
Else
rtfdados.SelBullet = False
End If
End Sub
Código para ativar marcadores

- Usando Sobreescrito e subescrito

Podemos usar os recursos de Sobreescrito e subescrito no controle RichTextBox através da propriedade SelCharOffset.

A sintaxe é : object.SelCharOffset [= offset]

onde temos:

Parte Descrição
object O objeto referência para o controle RichTextBox
offset Um valor inteiro que determina a posição do texto selecionado em relação ao texto base..

offset pode assumir os valores:

Valores Descrição
Null O texto contém uma mistura de diferentes valores para offsets.
0 (Padrão) Normal. Todos os caracteres aparecem no texto base.
Número positivo Sobreescrito. Os caracteres selecionados aparecem acima do texto base pel o número de twips especificado.
Número negativo Subescrito.ubscript. Os caracteres selecionados aparecem abaixo do texto base pel o número de twips especificado..

- inserindo objetos

Em tempo de execução podemos figuras em um controle RichTextBox . Os tipos de figuras permitidas nesta operação são : objetos que podem ser exibidos como ícones e objetos que podem ser exibidos como dados.

Na figura abaixo temos um exemplo de figura embutida em um controle RichTextBox:

Ao clicar no objeto embutido a aplicação associada ao arquivo será executada.

Quando os dados do controle forem salvos no formato RTF (usando o método SaveFile) a informação embutida também será salva.

Podemos também inserir uma figura padrão bmp , como na figura abaixo:

Ao clicar na figura o aplicativo Paint será executado permitindo a edição da figura.

Para incluir um objeto no controle RichTextBox podemos usar o seguinte código:(aqui usamos um controle CommonDialog para abir a janela onde iremos selecionar o arquivo a incluir no controle)

Private Sub Command1_Click()
  Dim strOpen As String
  CommonDialog1.ShowOpen
  strOpen = CommonDialog1.FileName
  rtfdados.OLEObjects.Add , , , strOpen
End Sub

A propriedade OLEObjects permite incluir, excluir e limpar objetos em um controle RichTextBox.

- O alinhamento de texto

O alinhamento de texto no controle RichtTextBox é feito pela propriedade - SelAlignment . A sintaxe é :

object.SelAlignment [= value]

onde temos:

Parte Descrição
object O objeto referência para o controle RichTextBox
value Um interiro ou constante que determina o alinhamento do parágrafo

Value pode ter os seguintes valores:

Constante Valor Descrição
  Null Nenhum. A Seleção possui mais de um parágrafco com diferentes alinhamentos.
rtfLeft 0 (Padrão).O parágrafo é alinhado ao longo da margem esquerda.
rtfRight 1 O parágrafo é alinhado ao longo da margem direita.
rtfCenter 2 O parágrafo é alinhado ao centro das margens direita e esquerda.

- Imprimindo o conteúdo do controle RichTextBox

Para imprimir o conteúdo de um controle RichTextBox usamos o método - SelPrint. O comando SelPrint envia o conteúdo do texto formatado no controle RichTextBox para a impressora. A sintaxe é a seguinte:

object.SelPrint(hdc)

onde temos:

Parte Descrição
object O objeto referência para o controle RichTextBox
hdc O contexto do dispositivo para o periférico que você deseja usar para imprimir o conteúdo do controle.

o argumento hDC representa a propriedade do objeto Printer que irá imprimir o conteúdo do controle.

- Somente o texto selecionado será impresso. Se nada for selecionado todo o texto será impresso.

- O método SelPrint não imprime o texto apenas envia uma cópia para o dispositivo definido para imprimir o texto.

- Para enviar um texto para a impressora padrão podemos usar o seguinte código :

RichTextBox1.SelPrint(Printer.hDC)

Obs: Se você for usar o objeto Printer como destino do texto vai precisar inicializar o contexto do dispositivo para o ojbeto Printer . Para fazer isto basta imprimir uma string vazia.

Um exemplo de código que imprime o conteúdo de um controle - rtfdados - é dado abaixo:

Private Sub Command1_Click()
   CommonDialog1.Flags = cdlPDReturnDC + cdlPDNoPageNums
   If RichTextBox1.SelLength = 0 Then
      CommonDialog1.Flags = CommonDialog1.Flags + cdlPDAllPages
   Else
      CommonDialog1.Flags = CommonDialog1.Flags + cdlPDSelection
   End If
   CommonDialog1.ShowPrinter
   Printer.Print ""
   RichTextBox1.SelPrint CommonDialog1.hDC
End Sub

- Exibindo os atributos atuais do texto selecionado em um controle RichTextBox

Você pode indicar ao usuário qual os atributos atuais de um texto selecionado. O evento SelChange ocorre sempre que o ponto de inserção se move ou a seleção do texto foi modificada. Abaixo temos um exemplo onde conforme a seleção do texto , o evento SelChange é usado para exibir o status da propriedade SelBold(negrito) no controle ToolBar - tlbRTF.

Private Sub rtfData_SelChange()

' SelBold retorna 0, -1, or Null. 

Select Case rtfData.SelBold
Case 0 ' Não negrito.
  tlbRTF.Buttons("bold").Value = tbrUnpressed
Case -1 ' Negrito.
  tlbRTF.Buttons("bold").Value = tbrPressed
Case Else ' status mixto.
  tlbRTF.Buttons("bold").MixedState = True
End Select
End Sub

- Localizando um texto no controle RichTextBox

Public sAchar As String

Private Sub Command1_Click()

sAchar = inputBox("Informe a palavra a localizar :" , "Busca", sAchar)

if sAchar = "" Tehn Exit Sub

RichTextBox.Find sAchar

endif

End sub

Nota : Para localizar a próxima ocorrência do mesmo texto basta fazer o seguinte:

RicthTextBox1.SelStart = RicthTextBox1.SelStart + RicthTextBox1.SelLength + 1

RicthTextBox1.Find sAchar, , len(RicthTextBox1)

Acabou a teoria. Na continuação deste artigo iremos criar um exemplo prático. Aguarde...

Veja o link em : trabalhando com formatação em campos Memo de banco de dados

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 ?

Referências:


José Carlos Macoratti