GESTION DE SMILEYS AVEC RICHTEXTBOX

Signaler
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Statut
Membre
Dernière intervention
12 juillet 2006
-
cs_Geff
Messages postés
192
Date d'inscription
vendredi 2 mars 2001
Statut
Membre
Dernière intervention
10 janvier 2006
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/7643-gestion-de-smileys-avec-richtextbox

cs_Geff
Messages postés
192
Date d'inscription
vendredi 2 mars 2001
Statut
Membre
Dernière intervention
10 janvier 2006

J'ai une méthode peut etre plus simple pour afficher des smileys

Vous avez besoin de ::

1 Form
1 RichTextBox (RTB)
2 PictureBox (Temp_PIC et Smileys_PIC)
1 TextBox (Texte)
1 CommandButton (Command1)

Dans Smileys_Pic se trouve une image qui est un tableau de smileys

Voici le code ::

Public Sub ShowMessage(Msg As String)
Dim Smile As Variant
Dim Key As Byte
Dim SmilePos_CL As New Collection
Dim Cmp As Integer

'Scan toute la chaine de caractère
For i = 1 To Len(Msg)
Key = 0
'Boucle sur la collection des smileys
For Each Smile In Smileys_CL
'Si le smiley courant est détecté
If Mid(Msg, i, Len(Smile)) = Smile Then
'Ajoute le type et la position du smiley dans la collection
SmilePos_CL.Add Key
SmilePos_CL.Add i - 1 + Cmp
'Supprime le smiley détecté de la chaine
Msg = Left(Msg, i - 1) + " " + Right(Msg, Len(Msg) - (i + Len(Smile)))
Cmp = Cmp + 1
Exit For
End If
Key = Key + 1
Next
Next
'Affiche le texte épuré (sans smileys, ni graphique ni texte) dans le RTB
RTB.Text = Msg
'Ajoute les smileys détectés
For i = 1 To SmilePos_CL.Count Step 2
PasteSmiley SmilePos_CL(i), SmilePos_CL(i + 1)
Next
End Sub

Public Sub PasteSmiley(Key As Byte, Pos As Integer)
Dim x as byte
Dim y as byte

'Trouve la position du smiley selon son index
y = ((Key Mod 10)) * 16
x = Int(Key / 10) * 16
'Colle le smiley dans un picturebox temporaire
Temp_Pic.PaintPicture Smileys_PIC, 0, 0, , , x, y, 16, 16
PasteImage Temp_Pic, Pos

End Sub

Sub PasteImage(Pic As PictureBox, Pos As Integer)

'Vide le presse papier
Clipboard.Clear
'Colle le smiley dans le presse papier
Clipboard.SetData Pic.Image
'Position du smiley
RTB.SelStart = Pos
'Colle le smiley
SendMessage RTB.hwnd, WM_PASTE, 0, 0

End Sub

Private Sub Command1_Click()

ShowMessage Texte.Text

End Sub

Private Sub Form_Load()
Smileys_CL.Add ":)"
Smileys_CL.Add ";)"
Smileys_CL.Add ":p"
Smileys_CL.Add ":D"
Smileys_CL.Add "LOL"
Smileys_CL.Add ":$"
Smileys_CL.Add ":("
Smileys_CL.Add ":o"
Smileys_CL.Add ":O"
Smileys_CL.Add ">:O"
Smileys_CL.Add "8)"
End Sub

Voila tout, la taille des smileys et de 16*16 et le tableau de smileys et 10*20 dans mon exemple, mais seul les 11 premiers smileys sont ajoutés dans la collection, vu que c'est pour un exemple, pas besoin de plus!
Voila ma contrib, si vous avez des suggestions...
cbnet
Messages postés
176
Date d'inscription
vendredi 29 octobre 2004
Statut
Membre
Dernière intervention
7 mars 2005

Bravo je cherchais cette source depuis un ptit moment !
Mais je suis sous VB5 et j'ai un peu galéré pour la faire fonctionner...
S'il y en a qui ont (ou ont eu) le même problème que moi, si ça peut aider, j'ai expliqué la démarche à suivre à cette adresse du forum :
http://www.vbfrance.com/forum.v2.aspx?ID=386211

@+
peug
Messages postés
234
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Vos commentaires m'interroge sur le format du smiley sous Win98SE... En effet je rencontre un problème similaire simplement en placant un gif dans un picturebox puis en exécutant cela sous Win98SE. ! Il me semble qu'il y a quelque année cela fonctionné ! Maintenant je developpe sous XP mais mon soft, à cause de GIF, ne tourne plus sous WIN98 (cas d'un GIF dans un picturebox)... Une DLL manque ou ne serait plus à jour pour ouvrir un gif dans un soft VB6 ? Ne serait-ce pas du au SP6 de VB6 ?
cs_LagPhil
Messages postés
8
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
20 août 2009

Ton code est très bien, je voudrais juste savoir si quelqu'un sait comment empêcher le redimensionnement d'une image dans un richtextbox. J'ai déjà trouver une source sur ce site mais ça ne fonctionne pas. Merci d'avance !