VB6 - Formatação em campos Memo de banco de dados

 

Neste artigo  eu vou mostrar como trabalhar com formatação em campos memos armazenados em banco de dados. Já pensou nas possibilidades ??? Você poderia armazenar cartas com formatação em banco de dados e assim não perder todo a formatação já efetuada no texto. ( É claro que você vai pensar em mais opções...)

 

Eu já abordei as propriedades do controle RichTextBox no artigo : VB - Usando o controle Rich TextBox - por isto vou focar neste artigo somente a parte referente a utilização com banco de dados.

 

A primeira coisa a fazer é criar uma tabela em um banco de dados com dois campos :

 

1- um campo chave primária para identificar unicamente do tipo autonumeração

 

2- um campo Memo onde iremos armazenar o texto formatado. Sua estrutura é mostrada ao lado.

 

Vamos agora criar um interface simples para mostrar como o funcionamento do projeto , é claro que você tem a obrigação de melhorá-la...

 

 - O projeto usa os seguintes controles :
  • 5 botões de comando : command1(0), command1(1), ..., command2(4)
  • 2 combobox - combo1 e combo2
  • 6 botões de opções - option1,option2, option3, ..., option6
  • Um controle RichTextBox - RichTextBox1
  • 4 botões de comando : command2(0),...command2(3)
  • 1 controle commonDialog

 

 

Agora vamos ao código do projeto :

 

1- Na seção General Declarations vamos declarar as variáveis objetos para efetuar a conexão com o banco de dados e operar o recordset:

 

Option Explicit
Dim conexao As New ADODB.Connection
Dim rcst As New ADODB.Recordset

 

2- No evento Load do formulário vamos colocar o seguinte código :

 

Private Sub Form_Load()
 

Dim i As Integer

 

conexao.Open "Provider=Microsoft.JET.OLEDB.4.0;Data Source=RchBD.mdb"
rcst.Open "TextoFormatado", conexao, adOpenKeyset, adLockOptimistic

 

'se existem registros atribui o primeiro registro ao controle Text1.Text

If rcst.RecordCount <> 0 Then
     rcst.MoveFirst
     RichtTextBox1.TextRTF = rcst("TextoRTF")
End If

'preenche a combo box com as fontes disponíveis

For i = 0 To Screen.FontCount - 1
    combo1.AddItem Screen.Fonts(i)
Next i
 

'preenche a combo box com os tamanhos das fontes

For i = 8 To 24 Step 2
     Combo2.AddItem i
Next i
Combo2.ListIndex = 0

End Sub

rcst("TextoRTF") - representa o campo armazenado no banco de dados.

 

RichTextBox1.TextRTF - representa o controle richtextbox e sua propriedade TextRTF

 

Abaixo temos o código associado aos botões de comando - command1(0),..command1(4) : referentes aos botões : incluir , excluir , cancelar e gravar. Usa os seguintes métodos da ADO :

  1. Addnew - para incluir um novo registro

  2. update - para atualizar o registro atual

  3. delete - para excluir um registro

  4. EditMode - para verificar o status atual do registro .

Private Sub Command1_Click(Index As Integer)

Select Case Index
Case 0     'incluir
   rcst.AddNew     'Posiciona o cursor para novo registro
   RichTextBox1.TextRTF = ""   'limpa o controle richtextbox

Case 1   'excluir
  If rcst.RecordCount = 0 Then Exit Sub
  If MsgBox("Deseja excluir este registro ? ", vbYesNo, "Excluir") = vbYes Then
     rcst.Delete
  Else
     Exit Sub
  End If
  RichTextBox1.TextRTF = ""  'limpa o controle

   If rcst.RecordCount = 0 Then Exit Sub
   rcst.MoveFirst
   RichTextBox1.TextRTF = rcst("TextoRTF")   'atribui o campo do banco de dados ao controle e exibe os dados

Case 2   'cancelar
    rcst.CancelUpdate 'Cancela a atualização do registro
    RichTextBox1.TextRTF = rcst("TextoRTF")   'retorna o registro atual antes do commando addnew
 

Case 3   'sair
   If MsgBox("Deseja Encerrar o sistema ? ", vbYesNo, "Encerrarr") = vbYes Then
       End
   End If


Case 4 'gravar

   ' se estiver em modo de edição ou inclusão de registros então grava
   If rcst.EditMode = adEditAdd Or rcst.EditMode = adEditInProgress Then
        rcst("TextoRTF") = RichTextBox1.TextRTF
        rcst.Update
        RichTextBox1.TextRTF = rcst("TextoRTF")
        MsgBox "Registro gravado com sucesso !", vbInformation, "Gravado"
   End If
End Select

End Sub

 

A seguir o código associado aos botões de comando para navegar pelos registros : usa os métodos - movefirst , movenext , moveprevious e movelast da ADO . A cada movimentação verificarmos as propriedades BOF e EOF do recordset.

 

Private Sub Command2_Click(Index As Integer)
Select Case Index
Case 0
    If rcst.RecordCount = 0 Then Exit Sub 'Verifica se existem registros no recordset
    rcst.MovePrevious                            'Move o cursor para o registro anterior
    If rcst.BOF Then rcst.MoveFirst
    RichTextBox1.TextRTF = rcst("TextoRTF") 'Atualiza o RichTextBox
Case 1
    If rcst.RecordCount = 0 Then Exit Sub 'Verifica se existem registros no recordset
    rcst.MoveNext                                 'Move o cursor para o próximo registro
    If rcst.EOF Then rcst.MoveLast
    RichTextBox1.TextRTF = rcst("TextoRTF")
Case 2
   If rcst.RecordCount = 0 Then Exit Sub 'Verifica se existem registros no recordset
   rcst.MoveFirst                                 'Move o cursor para o primeiro registro do recordset
   RichTextBox1.TextRTF = rcst("TextoRTF") 'Atualiza o RichTextBox
Case 3
   If rcst.RecordCount = 0 Then Exit Sub 'Verifica se existem registros no recordset
   rcst.MoveLast                                 'Move o cursor para o último registro
   RichTextBox1.TextRTF = rcst("TextoRTF") 'Atualiza o RichTextBox
End Select
End Sub

 

O código associado ao controle picturebox  para atribuir cores ao texto : Abre a caixa de dialogo mostrando as cores . A cor selecionado é atribuída ao texto selecionado no controle.

 

Private Sub Picture1_Click()
   CommonDialog1.Color = Picture1.BackColor
   CommonDialog1.ShowColor
   Picture1.BackColor = CommonDialog1.Color
   RichTextBox1.SelColor = Picture1.BackColor
End Sub

 

O código associado aos botões de verificação - Negrito , Itálico e Sublinhado : Atribui ao texto selecionado no controle os efeitos assinalados

Private Sub chkNegrito_Click()
  If chkNegrito.Value = 2 Then Exit Sub
  RichTextBox1.SelBold = chkNegrito.Value
End Sub

Private Sub chkItalico_Click()
   If chkItalico.Value = 2 Then Exit Sub
   RichTextBox1.SelItalic = chkItalico.Value
End Sub


Private Sub chkSublinhado_Click()
    If chkSublinhado.Value = 2 Then Exit Sub
    RichTextBox1.SelUnderline = chkSublinhado.Value
End Sub

 

Agora o código do evento Change do controle RichTextBox . A cada alteração no controle e evento é disparado atualizando as alterações.

 

Private Sub RichTextBox1_Change()
    Picture1.BackColor = IIf(IsNull(RichTextBox1.SelColor), Picture1.BackColor, RichTextBox1.SelColor)
    chkNegrito.Value = IIf(IsNull(RichTextBox1.SelBold), 2, Abs(RichTextBox1.SelBold))
    chkItalico.Value = IIf(IsNull(RichTextBox1.SelItalic), 2, Abs(RichTextBox1.SelItalic))
    chkSublinhado.Value = IIf(IsNull(RichTextBox1.SelUnderline), 2, Abs(RichTextBox1.SelUnderline))

   If Not IsNull(RichTextBox1.SelAlignment) Then
      Option1(RichTextBox1.SelAlignment).Value = True
   End If
   Combo1.Text = IIf(IsNull(RichTextBox1.SelFontName), "", RichTextBox1.SelFontName)
   Combo2.Text = IIf(IsNull(RichTextBox1.SelFontSize), "", RichTextBox1.SelFontSize)
End Sub

 

O código associado aos botões de opção: direita, esquerda e centralizado. Como usamos um array de controles o código ficou simplificado.

Private Sub Option1_Click(Index As Integer)
     RichTextBox1.SelAlignment = Index
End Sub

 

Finalmente o código associado ao evento Click das caixas de combinação. Ao selecionar uma fonte ou tamanho da fonte a seleção é atribuída ao texto selecionado no controle.

Private Sub Combo1_Click()
     If Combo1.Text = "" Then Exit Sub
     RichTextBox1.SelFontName = Combo1.Text
End Sub

Private Sub Combo2_Click()
       If Combo2.Text = "" Then Exit Sub
       If CSng(Combo2.Text) < 1 Then Exit Sub
       RichTextBox1.SelFontSize = Combo2.Text
End Sub
 

 

Executando o projeto , temos o resultado abaixo. Procurei usar alguns efeitos . O projeto do artigo pode ser imensamente melhorado ...

 

tchau, até o próximo artigo sobre Visual Basic...
 

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