Convertir le contenu d'une richtextbox en html (vb.net)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 760 fois - Téléchargée 36 fois

Contenu du snippet

Voila une petite fonction qui converti le contenu d'une richtextbox en code HTML

Source / Exemple :


Private Function ConvertToHTML(ByVal Box As RichTextBox) As String
        Dim strHTML As String
        Dim strColeur As String
        Dim blnGras As Boolean
        Dim blnItalic As Boolean
        Dim strPolice As String
        Dim shtTaille As Short
        Dim lngDepartOriginal As Long
        Dim lngTailleOriginal As Long
        Dim intCount As Integer

        ' Si le text est vide, on sort
        If Box.Text.Length = 0 Then Exit Function

        ' Conserver la selection originale, et selectionné le debut
        lngDepartOriginal = 0
        lngTailleOriginal = Box.TextLength
        Box.Select(0, 1)

        ' Entete HTML
        strHTML = "<HTML>"

        ' Récuperer les parametres initaux
        strColeur = Box.SelectionColor.ToKnownColor.ToString
        blnGras = Box.SelectionFont.Bold
        blnItalic = Box.SelectionFont.Italic
        strPolice = Box.SelectionFont.FontFamily.Name
        shtTaille = Box.SelectionFont.Size
        ' Inclure le premier parametre HTML "Style"
        strHTML += "<SPAN style=""font-family: " & strPolice & _
          "; font-size: " & shtTaille & "pt; color: " _
                          & strColeur & """>"
        ' Inclure le TAg GRAS si besoin est
        If blnGras = True Then
            strHTML += "<B>"
        End If
        ' Inclure le TAg ITALIQUE si besoin est
        If blnItalic = True Then
            strHTML += "<I>"
        End If

        ' Finalement on attaque le premier caractère
        strHTML += Box.Text.Substring(0, 1)

        ' Boucle sur le reste du texte
        For intCount = 2 To Box.Text.Length

            ' Selection du caractere
            Box.Select(intCount - 1, 1)

            ' Verifier et implementer si necessaire un changement de style
            If Box.SelectionColor.ToKnownColor.ToString <> strColeur _
                 Or Box.SelectionFont.FontFamily.Name <> strPolice _
                 Or Box.SelectionFont.Size <> shtTaille Then
                strHTML += "</SPAN><SPAN style=""font-family: " _
                  & Box.SelectionFont.FontFamily.Name & _
                  "; font-size: " & Box.SelectionFont.Size & _
                  "pt; color: " & _
                  Box.SelectionColor.ToKnownColor.ToString & """>"
            End If
            ' Verifier changement GRAS
            If Box.SelectionFont.Bold <> blnGras Then
                If Box.SelectionFont.Bold = False Then
                    strHTML += "</B>"
                Else
                    strHTML += "<B>"
                End If
            End If
            ' Verifier changement ITALIQUE
            If Box.SelectionFont.Italic <> blnItalic Then
                If Box.SelectionFont.Italic = False Then
                    strHTML += "</I>"
                Else
                    strHTML += "<I>"
                End If
            End If

            ' Ajouter le caractere
            Select Case Box.Text.Substring(intCount - 1, 1)
                Case ControlChars.Lf ' Si c'est un LineFeed, mettre la borne <BR>
                    strHTML += "<BR>"
                Case " "
                    strHTML += "&nbsp;"
                Case ControlChars.Tab
                    strHTML += "&nbsp;&nbsp;&nbsp;&nbsp;"
                Case Else
                    strHTML += System.Web.HttpUtility.HtmlEncode(Box.Text.Substring(intCount - 1, 1))
            End Select

            ' Mise a jour du style courant
            strColeur = Box.SelectionColor.ToKnownColor.ToString
            blnGras = Box.SelectionFont.Bold
            blnItalic = Box.SelectionFont.Italic
            strPolice = Box.SelectionFont.FontFamily.Name
            shtTaille = Box.SelectionFont.Size
        Next

        ' Fermer les Tag <B> <I> si necessaire
        If blnGras = True Then strHTML += "</B>"
        If blnItalic = True Then strHTML += "</I>"

        ' Fermer le style et la page HTML
        strHTML += "</SPAN></HTML>"

        ' Restorer la selection d'origine
        Box.Select(lngDepartOriginal, lngTailleOriginal)

        ' Retourner le code HTML
        Return strHTML
    End Function

Conclusion :


voila et aprés :

Chaine_HTML = ConvertToHTML (Controle_RichText)

A voir également

Ajouter un commentaire

Commentaires

ça marche très bien! merci
Messages postés
2
Date d'inscription
jeudi 21 juin 2007
Statut
Membre
Dernière intervention
17 octobre 2008

Euh petite erreur de derniere minute : remplacez "=" par ":" dans "text-align=". Voila :)
Messages postés
2
Date d'inscription
jeudi 21 juin 2007
Statut
Membre
Dernière intervention
17 octobre 2008

Merci pour la source :)
Voila traduction en C# pour les faignant :)

public static string RichToHtml(RichTextBox Box)
{
string strHTML="";
string strColeur;
bool blnGras;
bool blnItalic;
string strPolice;
short shtTaille;
HorizontalAlignment hzAlign;
string strHzAlign="";
int lngDepartOriginal;
int lngTailleOriginal;
int intCount;
if (Box.Text.Length == 0) return strHTML;
lngDepartOriginal = 0;
lngTailleOriginal = Box.TextLength;
Box.Select(0, 1);
//Entete HTML
strHTML = "<HTML>";
strColeur = Box.SelectionColor.ToKnownColor().ToString();
blnGras = Box.SelectionFont.Bold;
blnItalic = Box.SelectionFont.Italic;
strPolice = Box.SelectionFont.FontFamily.Name;
hzAlign = Box.SelectionAlignment; if (hzAlign HorizontalAlignment.Left) strHzAlign "Left"; else if (hzAlign HorizontalAlignment.Center) strHzAlign "Center"; else if (hzAlign HorizontalAlignment.Right) strHzAlign "Right";
shtTaille = Convert.ToInt16( Box.SelectionFont.Size);
strHTML += "
";
if (blnGras)
{
strHTML += "";
}
if (blnItalic)
{
strHTML += "";
}
strHTML += Box.Text.Substring(0, 1);
//Boucle sur le reste du texte
for (intCount =2;intCount<=Box.Text.Length;intCount++) {
//Selection du caractere
Box.Select(intCount - 1, 1);
//Verifier et implementer si necessaire un changement de style
if ((Box.SelectionColor.ToKnownColor().ToString() != strColeur) || (Box.SelectionFont.FontFamily.Name != strPolice) || (Convert.ToInt16(Box.SelectionFont.Size) != shtTaille) || (Box.SelectionAlignment != hzAlign))
{ if (Box.SelectionAlignment HorizontalAlignment.Left) strHzAlign "Left"; else if (Box.SelectionAlignment HorizontalAlignment.Center) strHzAlign "Center"; else if (Box.SelectionAlignment HorizontalAlignment.Right) strHzAlign "Right";

strHTML += "
" + Environment.NewLine + "
";
}
// Verifier changement GRAS
if (Box.SelectionFont.Bold != blnGras)
{
if (Box.SelectionFont.Bold == false)
{
strHTML += "";
}
else
{
strHTML += "";
}
}
//Verifier changement ITALIQUE
if (Box.SelectionFont.Italic != blnItalic)
{
if (Box.SelectionFont.Italic == false)
{
strHTML += "";
}
else
{
strHTML += "";
}
}
//Ajouter le caractere
switch (Box.Text.Substring(intCount - 1, 1))
{
case "\n":
strHTML += "
";
break;
case " ":
strHTML += " ";
break;
case "\t":
strHTML += " ";
break;
default:
strHTML += System.Web.HttpUtility.HtmlEncode(Box.Text.Substring(intCount - 1, 1));
break;
}
//Mise a jour du style courant
strColeur = Box.SelectionColor.ToKnownColor().ToString();
blnGras = Box.SelectionFont.Bold;
blnItalic = Box.SelectionFont.Italic;
strPolice = Box.SelectionFont.FontFamily.Name;
shtTaille = Convert.ToInt16(Box.SelectionFont.Size);
hzAlign = Box.SelectionAlignment;
}
//Fermer les Tag si necessaire
if (blnGras) strHTML += "";
if (blnItalic) strHTML += "";
//Fermer le style et la page HTML
strHTML += "
</HTML>";
//Restorer la selection d'origine
Box.Select(lngDepartOriginal, lngTailleOriginal);
return strHTML;
}
Messages postés
17
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
25 septembre 2008

super codebravo
8/10
Messages postés
6
Date d'inscription
samedi 23 août 2003
Statut
Membre
Dernière intervention
25 août 2005

Super.
Peut-on facilement transposer le code en VB6 ?
Sûrement en utilisant quelques API, mais lesquelles ?
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.