• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sir Pereira

O meu Notepad

39 mensagens neste tópico

Boas pessoal,

é o seguinte, estou a desenvolver o meu bloco de notas, e actualmente encontro-me a adicionar opções de formatação, por agora negrito, itálico e sublinhado.

Tenho estado a criar as condições para o Bold, mas estou com alguns problemas:

- por exemplo, imaginemos que escrevo na caixa de texto:

"ola eu sou o joao. ola eu sou a joana"

Se eu quiser pôr o segundo "ola" a negrito, o programa põe-me o primeiro em vez disso.

Esse é um dos problemas, outro dos problemas é o seguinte, imaginem que tenho uma frase, e tenho bocados dela em negrito e outros não. Selecciono a frase toda, e queria que esta, tivesse uma acção como no MsWord, que ao carregar no botão Negrito com toda a frase seleccionada (com digitos em negrito e outros não), ficasse toda normal, isto é, sem qualquer formatação, e se clicasse de novo ficava toda em negrito.

Código:

    Private Sub campo_texto_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles campo_texto.SelectionChanged
        Dim ibold As New Font(campo_texto.Font, FontStyle.Bold)
        Dim iregular As New Font(campo_texto.Font, FontStyle.Regular)
        selectedtext = campo_texto.SelectedText
        If campo_texto.SelectionFont.Bold Then
            btn_bold.Checked = True
        Else
            btn_bold.Checked = False
        End If
    End Sub

    Private Sub campo_texto_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles campo_texto.TextChanged
        Dim descTmp() As String = campo_texto.Text.Split(" ")
        Dim descCount As Integer = descTmp.Length
        lbl_words.Text = "Words: " & descTmp.Length
    End Sub

    Private Sub btn_bold_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_bold.Click
        Dim ibold As New Font(campo_texto.Font, FontStyle.Bold)
        Dim iregular As New Font(campo_texto.Font, FontStyle.Regular)

        If btn_bold.Checked = False Then
            If campo_texto.SelectedText = "" Then
                campo_texto.SelectionFont = ibold
                btn_bold.Checked = True
            Else
                campo_texto.SelectionStart = campo_texto.Find(selectedtext)
                campo_texto.SelectionFont = ibold
                btn_bold.Checked = False
            End If
        Else
            campo_texto.SelectionFont = iregular
            btn_bold.Checked = False
        End If
        
    End Sub

Screenshot:

screennotepad.jpg

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dá para as duas perguntas:

        If Me.RichTextBox1.SelectionFont.Bold Then
            Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font, FontStyle.Regular)
        Else
            Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font, FontStyle.Bold)
        End If

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E substituiria esse por qual dos códigos?

No btn_bold_Click(), mas tens razão, nem reparei bem no teu código.

Tenta assim:

        If Me.ToolStripButton1.Checked Then
            Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font, FontStyle.Regular)
        Else
            Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font, FontStyle.Bold)
        End If
        Me.ToolStripButton1.Checked = Not Me.ToolStripButton1.Checked

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espectáculo! :) funciona perfeitamente. Será que ainda é necessário o código que eu tenho no evento campo_texto_SelectionChanged?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Será que ainda é necessário o código que eu tenho no evento campo_texto_SelectionChanged?

LOL ... nem sei bem o que faz!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deixa lá, já resolvi :)

Outra coisa, e se eu quiser ter estilos conjuntos? Imagina, que quero um texto a negrito e a itálico? O código não me permite isso (apesar dos buttons aparecerem checked's)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epá, agora é conjugares, por exemplo:

Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font, (FontStyle.Bold + FontStyle.Italic))

É um pouco de trabalho e validações. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epá, agora é conjugares, por exemplo:

Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font, (FontStyle.Bold + FontStyle.Italic))

É um pouco de trabalho e validações. :D

Eu bem me parecia que era algo semelhante. :)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Após algumas tentativas, vi com (um pouco) de sucesso o final desta etapa.

Continuo com alguns problemas, do tipo, se tiver o Bold e o Italic seleccionado, e carregar no Underline, o texto irá ficar com Underline e com o último botão (Bold/Italic/Underline) a ser carregado antes do Underline.

Aqui está o código:

    Private Sub btn_bold_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_bold.Click
        If Me.btn_bold.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, FontStyle.Regular)
        ElseIf Not Me.btn_bold.Checked And Me.btn_italic.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Bold + FontStyle.Italic))
        ElseIf Not Me.btn_bold.Checked And Me.btn_underline.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Underline + FontStyle.Bold))
        ElseIf Not Me.btn_bold.Checked And Me.btn_underline.Checked And Me.btn_italic.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Underline + FontStyle.Bold + FontStyle.Italic))
        Else
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, FontStyle.Bold)
        End If

        Me.btn_bold.Checked = Not Me.btn_bold.Checked
    End Sub

    Private Sub btn_italic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_italic.Click
        If Me.btn_italic.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, FontStyle.Regular)
        ElseIf Not Me.btn_italic.Checked And Me.btn_bold.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Bold + FontStyle.Italic))
        ElseIf Not Me.btn_italic.Checked And Me.btn_underline.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Underline + FontStyle.Italic))
        ElseIf Not Me.btn_italic.Checked And Me.btn_bold.Checked And Me.btn_underline.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Underline + FontStyle.Bold + FontStyle.Italic))
        Else
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, FontStyle.Italic)
        End If

        Me.btn_italic.Checked = Not Me.btn_italic.Checked
    End Sub

    Private Sub btn_underline_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_underline.Click
        If Me.btn_underline.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, FontStyle.Regular)
        ElseIf Not Me.btn_underline.Checked And Me.btn_bold.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Bold + FontStyle.Underline))
        ElseIf Not Me.btn_underline.Checked And Me.btn_italic.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Underline + FontStyle.Italic))
        ElseIf Not Me.btn_underline.Checked And Me.btn_bold.Checked And Me.btn_italic.Checked Then
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, (FontStyle.Underline + FontStyle.Bold + FontStyle.Italic))
        Else
            Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, FontStyle.Underline)
        End If

        Me.btn_underline.Checked = Not Me.btn_underline.Checked
    End Sub

Tenho impressão que é um problema bem simples, mas tá difícil de o encontrar  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a complicar o código e a escrever código desnecessariamente, daqui a 10min venho aqui ajudar-te (neste momento não posso)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como prometido cá estou eu, ora experimenta o código assim, ainda precisa de uns ajustes mas já ficas com umas luzes

Private Sub btn_bold_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_bold.Click
        BoldItalicUnderline()
    End Sub

    Private Sub btn_italic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_italic.Click
        BoldItalicUnderline()
    End Sub

    Private Sub btn_underline_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_underline.Click
        BoldItalicUnderline()
    End Sub

    Private Sub BoldItalicUnderline()
        Dim estilo As New Drawing.FontStyle
        If btn_italic.Checked Then
            estilo = FontStyle.Italic
        End If
        If btn_bold.Checked Then
            estilo += FontStyle.Bold
        End If
        If btn_underline.Checked Then
            estilo += FontStyle.Underline
        End If

        Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, estilo)
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, agora não estou em casa, mas quando chegar testo.

Sabes se funciona, ou foi de cabeça? :P

Já agora, não sabem como fazer um bom contador de palavras? Pois o meu actual conta as palavras por cada espaço entre elas. Eu gostava que a "palavra" em si fosse contada, pois se eu tiver um espaço no final da frase ela conta com 'mais uma palavra'.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sir Pereira: define "palavra" ...

Não é tão simples como parece.

Quantas palavras têm estas linhas:

a) O meu monitor tem uma frequência de 70Hz.

:P O meu monitor tem uma frequência de 70 Hz.

c) A ligação RS232-C falhou.

d) Hoje apetece-me jantar fora.

Provavelmente contar os espaços serve como bom indicador do número de palavras num texto :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(Os moderadores não gostam disto, 2 questões no mesmo tópico)

Seja como for, até é bastante simples, basta-te fazer assim:

Sir Pereira e pmg testem :P

Dim contaPalavras() As String = Strings.Split(Strings.Trim(campo_texto.Text), " ")
       
MsgBox("O texto tem " & contaPalavras.Length & " palavras.")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quantas palavras tem o texto seguinte?

"os inteiros -- aproximadamente -2.000.000.000 a 2.000.000.000 -- não suportam números com mais de 9 dígitos"

Eu digo que são 11 palavras.

E este?

' * * * * * * * * * * *
Dim x as int
' x x x x x x x x x x x

Eu digo que são 4 palavras

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isso estás a falar de separar números de palavras, penso que para este caso números serão contabilizados como palavras pois estamos a falar de um documento de texto.

O MS Word na primeira frase conta 16 palavras (assim como o código que sugeri)

palavrasby7.png

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(Os moderadores não gostam disto, 2 questões no mesmo tópico)

Quem ?

Eu acho que palavras são divididas por espaços, ou seja a frase "isto é 1 teste" é constituído por 4 palavras. Se existem outros critérios, então ele deve definir.

Mas a decisão é sempre dele :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yay! Cá está uma área onde os engenheiros informáticos estão no geral menos informados que os engenheiros de telecomunicações.

A resposta é, depende da linguagem que é usada para comunicar.

Uma palavra é um conjunto de um ou mais simbolos que transmite informação inteligível a quem a recebe. É o elemento báisco de informação do ponto de vista do destino.

Se estamos a falar de pessoas, os asteriscos no exemplo do pmg não são de todo palavras já que não significam coisa nenhuma. No primeiro exemplo, os '--' tambem não devem ser considerados palavras.

Em termos de código fonte, não podemos ver as coisas do ponto de vista de uma pessoa porque as linguagens de programação falam com os computadores, não são propriamente utilizadas por pessoas para comunicarem entre si.

Então, todos os literais e keywords são palavras e a sintaxe pode ser vista como o equivalente à pontuação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estamos a falar de um documento de texto.

O MS Word na primeira frase conta 16 palavras (assim como o código que sugeri)

palavrasby7.png

cito-me a mim mesmo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que interessa é a inteligibilidade dessa informação por parte do utilizador.

"documento de texto" é um formato, não diz nada em relação à linguagem conteudo, logo o conceito de 'palavra' não tem grande significado nesse contexto. É um pouco como olhares para uma fotografia e perguntares quantas palavras lá estão.

Tens que ver qual é o objectivo de uma ferramenta desse tipo. Pessoalmente, a única situação em que me vejo a usar uma coisa desse tipo é a escrever um texto com limite de palavras. Nesse caso não faz muito sentido andar a contar coisas como '--' ou '*' como palavras.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como prometido cá estou eu, ora experimenta o código assim, ainda precisa de uns ajustes mas já ficas com umas luzes

Private Sub btn_bold_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_bold.Click
        BoldItalicUnderline()
    End Sub

    Private Sub btn_italic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_italic.Click
        BoldItalicUnderline()
    End Sub

    Private Sub btn_underline_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_underline.Click
        BoldItalicUnderline()
    End Sub

    Private Sub BoldItalicUnderline()
        Dim estilo As New Drawing.FontStyle
        If btn_italic.Checked Then
            estilo = FontStyle.Italic
        End If
        If btn_bold.Checked Then
            estilo += FontStyle.Bold
        End If
        If btn_underline.Checked Then
            estilo += FontStyle.Underline
        End If

        Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, estilo)
    End Sub

Weasel testei agora e não funcionou :/ carrego nos botões e não acontece nada...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

    Private Sub BoldItalicUnderline()
        Dim estilo As New Drawing.FontStyle
        If btn_italic.Checked Then
            estilo = FontStyle.Italic
        End If
        If btn_bold.Checked Then
            estilo += FontStyle.Bold
        End If
        If btn_underline.Checked Then
            estilo += FontStyle.Underline
        End If

        Me.campo_texto.SelectionFont = New Font(Me.campo_texto.Font, estilo)
    End Sub

    Private Sub btn_bold_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_bold.Click
        btn_bold.Checked = True
        BoldItalicUnderline()
    End Sub

    Private Sub btn_italic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_italic.Click
        btn_italic.Checked = True
        BoldItalicUnderline()
    End Sub

    Private Sub btn_underline_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_underline.Click
        btn_underline.Checked = True
        BoldItalicUnderline()
    End Sub

Fiz umas alterações e funcionou, o problema é que se eu carregar outra vez no botão ele não tira a formatação do botão...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora