Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

phrodrigues95

Pré-visualizador de tópicos em editor de BBCode feito no VB

Recommended Posts

Bom dia!

 

Estou aqui mais uma vez para tentar resolver um problema. Eu estou desenvolvendo um editor de BBCode para um fórum e queria saber se é possível fazer um pré-visualizador de tópicos para ver como o tópico fica com os BBCodes aplicados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É possível, você vai precisar utilizar um fake post, ou seja, você deve postar no servidor do fórum porém este deve ser um falso, uma das ideias também é ver como ele é interpretado, assim você pode interpretá-lo na programação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como eu interpretar a tag direto da textbox?

 

Por exemplo:

 

O usuário digita na textbox: [.img]http://www.imgur.com/87hjd[./img] tem alguma forma de identificar a tag [/img] e transformá-la numa tag html <img src="http://www.imgur.com/87hjd" /> ??

 

A minha ideia inicial era essa do exemplo, aí eu abriria o arquivo .html pra pré-visualizar o tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é possível, porém isso vai ter que ser realizado com a sua e só a sua lógica, o que você vai ter que fazer é pegar os indexes de inicio da tag e as tags finais, para isso eu aconselho você fazer uma textbox de texto e outra variável ou textbox com o BBcode já formatado, porque assim você elimina o risco de pegar as tags repetidas.

 

Então pense assim, você tem código você vai ter que pegar desde o inicio da tag "[" até o fim da ultima tag "]", você terá de pegar todo o Index desta parte e transformar usando o comando Replace. Faça isso para todos os outros codes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou começar a desenvolver isso e vou postando aqui as dúvidas.

 

Bom, eu fiz isso mas não deu muito certo, alguém me ajuda?

 

Public Class Form1

   Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
       If e.KeyCode = Keys.OemOpenBrackets Then
           Dim n = txtCode.Text.Length
           txtCode.SelectionStart = n
           While e.KeyCode <> Keys.OemCloseBrackets
               txtCode.ScrollToCaret(n)
           End While
       End If
   End Sub

End Class

 

Isso seria para quando o usuário digitasse "[" iniciasse uma seleção até que ele digite "]".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não é no keydown que você vai ter que fazer isso...

 

Olha, uma ideia é você criar um controle para que todas as vezes que o usuário abra a "[" você some um, quando ele fechar também some 1, quando este valor chegar a 4 significa que ele tem uma tag aberta e fechada () ai o que você pode fazer é usar um método no textchanged do textbox para pegar os indexes:

 

Mais ou menos assim:

 

 

Private Sub Txt_Changed(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged

       If variavel = 4 Then
           //pega index inicial
           Dim indexinicial As Integer = TextBox1.Text.IndexOf("[")

           //pega index final
           Dim indexfinal As Integer = TextBox1.Text.LastIndexOf("]")

           //seleciona o lenght do inicial ao final
           TextBox1.Select(indexinicial, indexfinal)

           //Atribui o texto selecionado a uma variável
           Dim texto = TextBox1.SelectedText

           //Substitui pelo BBcode
           Dim rpl As String = TextBox1.Text.Replace(texto, "BBCODE")

           //Define o texto
           TextBox1.Text = rpl

       Else
           Exit Sub
       End If

   End Sub

 

 

Porém você vai ter que identificar a tag, logo você vai precisar fazer um If:

 

 

Private Sub Txt_Changed(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged

       If variavel = 4 Then


        	//pega index inicial
           Dim indexinicial As Integer = TextBox1.Text.IndexOf("[")

        	//pega index final
           Dim indexfinal As Integer = TextBox1.Text.LastIndexOf("]")

           //seleciona o lenght do inicial ao final
           TextBox1.Select(indexinicial, indexfinal)

        	//Atribui o texto selecionado a uma variável
           Dim texto = TextBox1.SelectedText
           Dim rpl As String

           If TextBox1.Text.Contains("[img]") Then

               //Substitui pelo BBcode
               rpl = TextBox1.Text.Replace(texto, "<img>")

           ElseIf TextBox1.Text.Contains("[code]") Then
               rpl = TextBox1.Text.Replace(texto, "BBCode")

           End If

           //Define o texto
           TextBox1.Text = rpl

       Else
           Exit Sub
       End If

   End Sub

 

 

PORÉM neste código você teria problemas em pegar o que está dentro da chave, há outra possibilidade:

 

 

Private Sub Txt_Changed(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged

       If variavel = 4 Then

           Dim rpl As String = ""

           If TextBox1.Text.Contains("[img]") Then
               rpl = TextBox1.Text.Replace("[img]", "<img>")
               rpl = TextBox1.Text.Replace("[/img]", "</img>")

           ElseIf TextBox1.Text.Contains("[tag]") Then
               rpl = TextBox1.Text.Replace("[tag]", "bbcode")
               rpl = TextBox1.Text.Replace("[/tag]", "bbcode")

               //mais código

           End If

           TextBox1.Text = rpl
           variavel = 0

       Else
           Exit Sub
       End If

   End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.