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 :
|
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"
'se existem registros atribui o primeiro registro ao controle Text1.Text If
rcst.RecordCount <> 0 Then For
i = 0 To Screen.FontCount - 1 'preenche a combo box com os tamanhos das fontes
For i = 8 To 24 Step 2 |
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 :
Addnew - para incluir um novo registro
update - para atualizar o registro atual
delete - para excluir um registro
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
Case 2 'cancelar
Case 3 'sair
' se estiver em
modo de edição ou inclusão de registros então grava
|
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() Private Sub chkSublinhado_Click() |
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 |
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() |
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET