Inserer une image dans un richtextbox à la position de son choix


Contenu du snippet

Bon voila, je fais une sorte de client pour un chat qui utilise pas mal les smileys, j'ai donc trouver necessaire d'ajouter la possibilité de voir ces dernier.
le probleme etant que j'utilise un richtextbox pr l'affichage des msg (pour la gestion des couleurs et des polices, c simpa), mais celui-ci ne comporte pas d'instruction capable d'inserer une image... le controle gerant pourtant du RTF, format qui supporte les image, ce que l'on peut voir lorsqu'on colle le contenu de clipbaord dans un controle richtextbox. c'est donc en partant de ça et sans vraiment me casser la tete que j'ai ecrit ce petit bout de code permettant d'ajouter une image à la position de son choix, et sans gener les selections faites par l'utilisateur dans ce controle (vu que les selections sont importantes pr gerer le multicouleur, multitaille).
voila pr la fabuleuse histoire (.............)
donc bon, je sais bien, c'est vraiment pas propre de jouer avec le clipboard comme ça...mais si qq1 a une autre idée, bah je dois avouer que ca me tente bien...

Source / Exemple :


' ajoutez cette classe a votre projet:

Public Class Class_DrawRtb
    Public Sub add_pictures_to_rtb(ByVal pic As Image, ByVal rtb As RichTextBox, ByVal index As Integer)
        Dim x As Clipboard
        Dim a As Integer
        Dim b As Integer
        Dim tmpobj As Object
        tmpobj = x.GetDataObject
        x.SetDataObject(pic)
        a = rtb.SelectionStart
        b = rtb.SelectionLength
        rtb.SelectionLength = 0
        rtb.SelectionStart = index
        rtb.Paste()
        x.SetDataObject(tmpobj)
        If index >= a Then a += 1
        rtb.SelectionStart = a
        rtb.SelectionLength = b
    End Sub
End Class

'et vous appeler la fonction comme ceci, dans n'importe quel autre fichier de votre projet :

Dim a As New Class_DrawRtb()
 a.add_pictures_to_rtb(New Bitmap("le_chemin_de_fichier"), RichTextBox1, RichTextBox1.SelectionStart)  
'ou si vous ajoutez les images en reference a votre prog :
Dim a As New Class_DrawRtb()
dim formz1 as form1 = new form1
 a.add_pictures_to_rtb(New Bitmap(formz1.GetType.Assembly.GetManifestResourceStream("NomdeProjet.image.bmp)"), RichTextBox1, RichTextBox1.TextLength) ' (en respectant la casse)

'd'ailleurs je voudrais bien acceder a des references sans definir la form... c possible?

Conclusion :


heu... critiquez donc, en general ça fait avancer les choses.
et je me repete :
"si qq1 a une autre idée, bah je dois avouer que ca me tente bien..."

A voir également

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.