Ir para o conteúdo

Richtextbox controlos II

Em continuação com este artigo, venho ilustrar um pouco mais os controlos da Richtextbox.

Detectar URLs e ao clicar nos mesmos direccionar para o browser:

  1. Nas propriedades da Richtextbox, define a propriedade DetectURLs como True.
  2. De seguida basta adicionar o seguinte evento:
    Private Sub RichTextBox1_LinkClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.LinkClickedEventArgs) Handles RichTextBox1.LinkClicked
        Process.Start(e.LinkText)
    End Sub
    

Inserir uma imagem:

 Private Sub InserirImagem(ByRef RichText As RichTextBox)
        Dim Escolher As New OpenFileDialog
        With Escolher
            .Filter = "Ficheiros Imagem (*.jpg,*.jpeg, *.gif, *.bmp)|*.jpg;*.jpeg;*.gif;*.bmp"
            .FileName = ""
            .Multiselect = False
            If .ShowDialog = Windows.Forms.DialogResult.OK Then

                ' Devemos atribuir o elemento como uma imagem
                Dim img As New Bitmap(Escolher.FileName)
                ' Pois só assim conseguiremos definir o clipboard.
                Clipboard.SetImage(img)
                RichText.Paste()

            End If
        End With
    End Sub

Nota: Novamente, para chamar o Sub basta:

InserirImagem(RichTextbox1)

RichTextBox1.Undo() ' Voltar atrás
RichTextBox1.Redo() ' Voltar a fazer

Relativamente ao zoom que podemos atribuir, há que ter em atenção a diminuição de zoom, pois só existem valores suportados até 0,015625. Sendo assim, impomos uma restrição!

RichTextBox1.ZoomFactor += 1 ' Zoom in

If RichTextBox1.ZoomFactor <> 1 Then ' Restrição
   RichTextBox1.ZoomFactor -= 1 ' Zoom out
End If

Inserir numeração (1, 2 - etc) -

Observação: código não desenvolvido por mim.

Const RTF_NUMSTART As String = _
            "{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss;}{\f1\froman\fcharset2 Symbol;}{\f2\fnil\fprq2\fcharset2;}{\f3\froman\fprq2;}}" & vbCrLf & _
            "{\colortbl\red0\green0\blue0;}" & vbCrLf & _
            "\deflang1033\pard\li720\fi-360\plain\f3\fs24 1.\tab "
        Const RTF_NUMITEM As String = _
            "\par @%@.\tab "
        Const RTF_NUMEND As String = "\par }"

        ' Get the current text.
        Dim old_text As String = _
            RichTextBox1.SelectedText.Replace(vbCrLf, vbLf)
        Dim lines() As String = Split(old_text, vbLf)

        ' Start the list.
        Dim new_text As String = RTF_NUMSTART & lines(0) & vbCrLf

        ' Add the other lines.
        For i As Integer = 1 To lines.Length - 1
            new_text &= _
                RTF_NUMITEM.Replace("@%@", (i + 1).ToString()) & _
                lines(i) & vbCrLf
        Next i

        ' Remove the final vbCrLf.
        new_text = new_text.Substring(0, new_text.Length - vbCrLf.Length)

        ' End the list.
        new_text &= RTF_NUMEND

        ' Save the result.
        RichTextBox1.SelectedRtf = new_text

        RichTextBox1.Focus()

Importante: Para formatares o tipo de numeração ao teu gosto, visita esta página.

Mudar o tipo de letra + tamanho da mesma:

Private Sub MudarLetra(ByRef RichText As RichTextBox)
        If RichText.SelectionFont IsNot Nothing Then
            RichText.SelectionFont = New Font(ComboBox1.Text, ComboBox2.Text)
        End If
End Sub