Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GESTION DE SMILEYS AVEC RICHTEXTBOX


Information sur la source

Catégorie :Divers Niveau : Initié Date de création : 23/07/2003 Date de mise à jour : 02/09/2003 01:02:15 Vu / téléchargé: 6 471 / 889

Note :
8,09 / 10 - par 11 personnes
8,09 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (25)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Cette appli a deux fonctions :

- Donner une idée pour gérer des smileys pour faire une chat par exemple.

- Apporter une nouvelle solution au pb : insérer une image dans une RichTextBox.

Techniquement on trouve la création/lecture de fichiers avec Open et l'utilisation des CommonDialogs.
 

Source

  • ''''''''''''''''''''''''''''''' DANS UNE FORM ''''''''''''''''''''''''''''''''''''''
  • Option Explicit
  • '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  • ' APP REALISEE PAR FERREIROS SEBASTIEN ALIAS GREENGOLD
  • '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  • Const PtIns As String = "{\pict\" 'Point d'insertion pour récupérer le contenu de l'image
  • Dim FSO As New FileSystemObject 'sert à manipuler les dossiers et fichiers, Projet > Références > Microsoft Scripting Runtime
  • Dim NomImg As String 'Nom du fichier image sélectionné par l'utilisateur
  • Dim ContenuImg As String 'Contenu des octets de l'image (Format RichTextFile)
  • Private Sub BtParcours_Click()
  • Dim ch As String
  • On Error GoTo GestionErreurs
  • 'Initialisation du CommonDialog
  • CD.CancelError = True 'une erreur sera déclenchée si l'utilisateur clique sur le bouton annuler
  • CD.DialogTitle = "Choisissez une image"
  • CD.Flags = cdlOFNPathMustExist And cdlOFNFileMustExist
  • CD.InitDir = App.Path & "\Smiles"
  • CD.Filter = "Images (jpg ou gif)|*.jpg; *.jpeg ; *.gif"
  • CD.ShowOpen
  • If FSO.FileExists(CD.FileName) = True Then 'On vérifie l'existence du fichier
  • 'S'il y a du texte dans le presse papier, on l'affecte à ch
  • If Clipboard.GetFormat(vbCFText) Then
  • ch = Clipboard.GetText
  • End If
  • 'Initialisation de la form
  • PicSmile.Cls
  • RtbSmile.Text = ""
  • PicSmile.Picture = LoadPicture(CD.FileName) 'On copie l'image dans une PictureBox invisible
  • 'Copie de l'image dans la RichTextBox pas API
  • Clipboard.Clear
  • Clipboard.SetData PicSmile.Picture
  • SendMessage RtbSmile.hwnd, WM_PASTE, 0, 0 'Insertion de l'image dans la RichTextBox
  • Clipboard.Clear
  • If Not ch = "" Then 'S'il y avait du texte dans le presse papier, on le recolle
  • Clipboard.SetText ch
  • End If
  • RtbRtf.Text = RtbSmile.TextRTF
  • NomImg = Left(CD.FileTitle, Len(CD.FileTitle) - 4)
  • Frame2.Enabled = True
  • Else
  • Err.Raise vbObjectError + 513 'On déclenche une erreur
  • End If
  • Exit Sub
  • GestionErreurs:
  • Select Case Err.Number
  • Case vbObjectError + 513 'Le fichier voulu n'existe pas
  • MsgBox "Ce fichier n'existe pas, veuillez en choisir un autre.", vbExclamation, "Fichier introuvable !"
  • Case cdlCancel 'Clic sur le bouton annuler de la CommonDialog
  • 'MsgBox "Clic sur Annuler !"
  • End Select
  • End Sub
  • 'Je sais que la déclaration de l'image commence par "{\pict\" et finit par "}"
  • 'On va faire une recherche de sous-chaine
  • Private Sub BtRecup_Click()
  • Dim PosDeb As Integer
  • Dim PosFin As Long
  • 'Recherche de la position de la sous-chaine
  • PosDeb = InStr(1, RtbRtf.Text, PtIns, vbTextCompare)
  • PosFin = Len(RtbRtf.Text) - 10 'InStr(PosDeb, RtbRtf.Text, "}", vbTextCompare)
  • 'Extraction de la sous-chaine
  • ContenuImg = Mid(RtbRtf.Text, PosDeb, PosFin - PosDeb + 1)
  • RtbPicRtf.Text = ContenuImg
  • End Sub
  • Private Sub BtConst_Click()
  • Dim Chemin As String
  • Dim Msg As VbMsgBoxResult
  • Chemin = App.Path & "\Fichiers .picrtf\" & NomImg & ".picrtf"
  • While FSO.FileExists(Chemin) = True
  • Msg = MsgBox("Attention le fichier " & NomImg & ".picrtf" & " existe déjà, il va être écrasé, voulez-vous le renomer ?", vbExclamation + vbYesNo)
  • If Msg = vbYes Then
  • NomImg = InputBox("Donnez un nom au nouveau fichier", , NomImg)
  • Chemin = App.Path & "\Fichiers .picrtf\" & NomImg & ".picrtf"
  • Else
  • Chemin = ""
  • End If
  • Wend
  • If Chemin = "" Then Chemin = App.Path & "\Fichiers .picrtf\" & Left(NomImg, Len(NomImg) - 4) & ".picrtf"
  • Open Chemin For Output As #1 'Accès et création du fichier (type = séquentiel, mode = écriture)
  • Print #1, ContenuImg 'écriture dans le fichier
  • Close #1
  • Frame2.Enabled = False
  • End Sub
  • Private Sub BtConv_Click()
  • 'Initialisation du CommonDialog
  • 'CD2.CancelError = True 'une erreur sera déclenchée si l'utilisateur clique sur le bouton annuler
  • CD2.DialogTitle = "Choisissez le fichier.picrtf"
  • CD2.Flags = cdlOFNPathMustExist And cdlOFNFileMustExist
  • CD2.InitDir = App.Path & "\Fichiers .picrtf"
  • CD2.Filter = "Fichiers .picrtf|*.picrtf"
  • CD2.ShowOpen
  • If FSO.FileExists(CD2.FileName) = True Then 'On vérifie l'existence du fichier
  • Call Convertir(ZsSmile.Text, CD2.FileName, RtbMess, RtbDest)
  • Else
  • MsgBox "Erreur...", vbCritical
  • End If
  • End Sub
  • Private Sub Convertir(ByVal Smile As String, ByVal PathFicPicRtf As String, _
  • ByVal RichTextBoxOrigine As RichTextBox, _
  • ByVal RichTextBoxDestination As RichTextBox)
  • 'Smile = ":)" ou ";+}" ...... Attention de ne pas prendre une chaine présente dans l'en-tête du format RichTextFile
  • 'PathFicPicRtf = Chemin complet du fichier.picrtf
  • 'RichTextBoxOrigine = La RichTextBox qui contient le message à convertir
  • 'RichTextBoxDestination = La RichTextBox qui contiendra les images
  • Dim Interm As String
  • Dim ChSmile As String 'chaine du .picrtf
  • Open PathFicPicRtf For Input As #1
  • While Not EOF(1) 'tant que non fin
  • Line Input #1, Interm 'lecture
  • ChSmile = ChSmile & Interm
  • Wend
  • Close #1
  • RichTextBoxDestination.TextRTF = Replace(RichTextBoxOrigine.TextRTF, Smile, ChSmile, , , vbTextCompare)
  • End Sub
  • '''''''''''''''''''''''''''''''' DANS UN MODULE ''''''''''''''''''''''''''''''''
  • Option Explicit
  • 'Sert à copier une image dans une RichTextBox (vide le presse papier !!)
  • Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  • Public Const WM_PASTE = &H302
''''''''''''''''''''''''''''''' DANS UNE FORM ''''''''''''''''''''''''''''''''''''''

Option Explicit

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'            APP REALISEE PAR FERREIROS SEBASTIEN ALIAS GREENGOLD
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''




Const PtIns As String = "{\pict\"   'Point d'insertion pour récupérer le contenu de l'image
Dim FSO As New FileSystemObject     'sert à manipuler les dossiers et fichiers, Projet > Références > Microsoft Scripting Runtime
Dim NomImg As String    'Nom du fichier image sélectionné par l'utilisateur
Dim ContenuImg As String    'Contenu des octets de l'image (Format RichTextFile)


Private Sub BtParcours_Click()
    Dim ch As String
   
    On Error GoTo GestionErreurs
    
    'Initialisation du CommonDialog
    CD.CancelError = True   'une erreur sera déclenchée si l'utilisateur clique sur le bouton annuler
    CD.DialogTitle = "Choisissez une image"
    CD.Flags = cdlOFNPathMustExist And cdlOFNFileMustExist
    CD.InitDir = App.Path & "\Smiles"
    CD.Filter = "Images (jpg ou gif)|*.jpg; *.jpeg ; *.gif"
    CD.ShowOpen
    If FSO.FileExists(CD.FileName) = True Then  'On vérifie l'existence du fichier
            
        'S'il y a du texte dans le presse papier, on l'affecte à ch
        If Clipboard.GetFormat(vbCFText) Then
            ch = Clipboard.GetText
        End If
        'Initialisation de la form
        PicSmile.Cls
        RtbSmile.Text = ""
        PicSmile.Picture = LoadPicture(CD.FileName) 'On copie l'image dans une PictureBox invisible
        'Copie de l'image dans la RichTextBox pas API
        Clipboard.Clear
        Clipboard.SetData PicSmile.Picture
        SendMessage RtbSmile.hwnd, WM_PASTE, 0, 0    'Insertion de l'image dans la RichTextBox
        Clipboard.Clear
        If Not ch = "" Then 'S'il y avait du texte dans le presse papier, on le recolle
            Clipboard.SetText ch
        End If
        RtbRtf.Text = RtbSmile.TextRTF
        NomImg = Left(CD.FileTitle, Len(CD.FileTitle) - 4)
        Frame2.Enabled = True
    Else
        Err.Raise vbObjectError + 513   'On déclenche une erreur
    End If
    Exit Sub

GestionErreurs:
    
    Select Case Err.Number
        Case vbObjectError + 513          'Le fichier voulu n'existe pas
            MsgBox "Ce fichier n'existe pas, veuillez en choisir un autre.", vbExclamation, "Fichier introuvable !"
        Case cdlCancel                  'Clic sur le bouton annuler de la CommonDialog
            'MsgBox "Clic sur Annuler !"
    End Select
End Sub


'Je sais que la déclaration de l'image commence par "{\pict\" et finit par "}"
'On va faire une recherche de sous-chaine
Private Sub BtRecup_Click()
    Dim PosDeb As Integer
    Dim PosFin As Long
    
    'Recherche de la position de la sous-chaine
    PosDeb = InStr(1, RtbRtf.Text, PtIns, vbTextCompare)
    PosFin = Len(RtbRtf.Text) - 10  'InStr(PosDeb, RtbRtf.Text, "}", vbTextCompare)
    'Extraction de la sous-chaine
    ContenuImg = Mid(RtbRtf.Text, PosDeb, PosFin - PosDeb + 1)
    RtbPicRtf.Text = ContenuImg
End Sub


Private Sub BtConst_Click()
    Dim Chemin As String
    Dim Msg As VbMsgBoxResult
    
    Chemin = App.Path & "\Fichiers .picrtf\" & NomImg & ".picrtf"
    While FSO.FileExists(Chemin) = True
        Msg = MsgBox("Attention le fichier " & NomImg & ".picrtf" & " existe déjà, il va être écrasé, voulez-vous le renomer ?", vbExclamation + vbYesNo)
        If Msg = vbYes Then
            NomImg = InputBox("Donnez un nom au nouveau fichier", , NomImg)
            Chemin = App.Path & "\Fichiers .picrtf\" & NomImg & ".picrtf"
        Else
            Chemin = ""
        End If
    Wend
    
    If Chemin = "" Then Chemin = App.Path & "\Fichiers .picrtf\" & Left(NomImg, Len(NomImg) - 4) & ".picrtf"

    Open Chemin For Output As #1    'Accès et création du fichier (type = séquentiel, mode = écriture)
        Print #1, ContenuImg        'écriture dans le fichier
    Close #1
    Frame2.Enabled = False
        
End Sub



Private Sub BtConv_Click()
    'Initialisation du CommonDialog
    'CD2.CancelError = True   'une erreur sera déclenchée si l'utilisateur clique sur le bouton annuler
    CD2.DialogTitle = "Choisissez le fichier.picrtf"
    CD2.Flags = cdlOFNPathMustExist And cdlOFNFileMustExist
    CD2.InitDir = App.Path & "\Fichiers .picrtf"
    CD2.Filter = "Fichiers .picrtf|*.picrtf"
    CD2.ShowOpen
    If FSO.FileExists(CD2.FileName) = True Then  'On vérifie l'existence du fichier
        Call Convertir(ZsSmile.Text, CD2.FileName, RtbMess, RtbDest)
    Else
        MsgBox "Erreur...", vbCritical
    End If
End Sub


Private Sub Convertir(ByVal Smile As String, ByVal PathFicPicRtf As String, _
                        ByVal RichTextBoxOrigine As RichTextBox, _
                        ByVal RichTextBoxDestination As RichTextBox)
'Smile = ":)" ou ";+}" ...... Attention de ne pas prendre une chaine présente dans l'en-tête du format RichTextFile
'PathFicPicRtf = Chemin complet du fichier.picrtf
'RichTextBoxOrigine = La RichTextBox qui contient le message à convertir
'RichTextBoxDestination = La RichTextBox qui contiendra les images
    
    Dim Interm As String
    Dim ChSmile As String   'chaine du .picrtf
    
    Open PathFicPicRtf For Input As #1
        While Not EOF(1)            'tant que non fin
            Line Input #1, Interm       'lecture
            ChSmile = ChSmile & Interm
        Wend
    Close #1

    RichTextBoxDestination.TextRTF = Replace(RichTextBoxOrigine.TextRTF, Smile, ChSmile, , , vbTextCompare)
End Sub


'''''''''''''''''''''''''''''''' DANS UN MODULE ''''''''''''''''''''''''''''''''

Option Explicit

'Sert à copier une image dans une RichTextBox (vide le presse papier !!)
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_PASTE = &H302




 

Conclusion

Le principe de fonctionnement est simple, on colle une image dans une RichTextBox, on extrait le codage de l'image du code RTF de la RichTextBox. Ensuite, on met le contenu de l'image extrait dans un fichier.picrtf (on aurait aussi pu le mettre dans une variable... ça reste à tester, surtout si on manipule des images volumineuses, peut-être que c plus performent... ?). Enfin, on utilise ce fichier, en écrivant son contenu directement dans le code RTF d'une RichTextBox.


Bon coding à tous ;)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Cyberdevil le 23/07/2003 20:45:08

coool comme méthode ouuuu jaime :) ! non mais bravo ! 10/10

signaler à un administrateur
Commentaire de eka808 le 23/07/2003 20:58:15

très bien

signaler à un administrateur
Commentaire de jockos le 23/07/2003 23:14:19

Intelligeament cogité... de la bonne bidouille mais bien clean.
Bien vu ;)

signaler à un administrateur
Commentaire de LordBob le 24/07/2003 12:13:57

oui excelent !!!

signaler à un administrateur
Commentaire de Tidus le 27/07/2003 17:30:59

Cette source, je l'attendais depuis longtemps ... Avec ça il y a moyen de supplanter MSN messenger ... Gnark ! lol

signaler à un administrateur
Commentaire de LosAmigos le 30/07/2003 11:13:03

Chez moi cela ne fonctionne pas, j'ai vb6 et win98, j'ai toujours en résultat le code rtf, mais pas le texte avec les smileys, meme un smiley seul ne fonctionne pas.

signaler à un administrateur
Commentaire de Greengold le 30/07/2003 21:20:17

Los Amigos -> C'est étonnant, j'ai téléchargé mon zip pour controler mais je n'ai pas ce problème. Je te conseille de faire un débogage pas à pas et vérifier si ya pas des problèmes de concaténations... Dans la dernière RichTextBox où tu devrais avoir les smileys qui apparaisent, controle l'exactitude du code RTF pour voir s'il n'y a pas d'abérations.
Je pense pas que ça vienne de win98... Donc là, je séche :)

signaler à un administrateur
Commentaire de Tidus le 31/07/2003 11:29:26

Peut-être est-ce un problème avce la vesion de l'OCX ? Enfin c'est juste une idée comme ça, ça me parait assez peu probable, mais qui sait ?

signaler à un administrateur
Commentaire de Greengold le 31/07/2003 11:35:51

J'ai pas installé de service pack sur ma machine...
En tout cas LosAmigos, si tu veux je peux créer un exe qui installera mon prog sur ta machine, yaura tout les ocx et dll installés correctement. Si ça t'intéresse, envoie moi un message privé avec ton adresse email.

signaler à un administrateur
Commentaire de PROGRAMMIX le 01/09/2003 18:23:33

Idem chez moi... Ca ne marche pas Win98 SE et VB6 SP5

signaler à un administrateur
Commentaire de Greengold le 01/09/2003 21:14:29

Pour le pb avec win98, je peux pas tester malheureusement...
Peut etre que le format rich text file est différent sous cet OS, c ce qui me semble le plus probable.
Si qq veut faire le test ou m'envoyer un document texte détaillé...

signaler à un administrateur
Commentaire de jockos le 01/09/2003 23:21:53

Ce problème vient tout simplement de la version du controle ActiveX RichText32.ocx.
Utilisez la version de ce controle ocx fournit avec XP et n'oubliez pas de l'inscrire dans la base de registre avec "regsvr32 ...".

signaler à un administrateur
Commentaire de Greengold le 02/09/2003 01:16:09

Sur les conseils de jockos, j'ai modifié le zip, vous trouverez ma version du RichText32.ocx ainsi qu'une appli glanée sur ce site qui permet d'enregistrer proprement un ocx.
Je compte sur toi programmix pour tester et me donner des nouvelles.

signaler à un administrateur
Commentaire de PROGRAMMIX le 02/09/2003 17:34:13

Je viens de téléharger ton zip et avant de procéder à l'enregistrement de ton OCX dans le registre, j'ai procédé à une vérification des versions...

La version dans ton zip est la 6.00.8169 du 18/6/1998 alors que celle qui est dans le répertoire système est la 6.00.8804 du 14/03/2000.  

Je crains donc que la version dans ton zyp ne soit pas la bonne...

Ou alors, il faut chercher le problème ailleurs...

signaler à un administrateur
Commentaire de Ouneufe le 02/12/2003 12:36:16

j'ai pas testé ce source (ni vérifié l'ocx) mais à priori c'est d'enfer. Je vais tester de ce pas.

signaler à un administrateur
Commentaire de Tidus le 03/12/2003 17:25:41

Il est aussi possible que le numéro de version de Programix soit erronné... Bon, ça ne tient que siil utilise unkit deconnexion (Genre Wanadoo) qui modifieInternet Explorer ... En effet, les kits utilisent généralemlent des versions surélevées (On a vu des Wanadoo installer Internet Explorer 6.9 !!!) ... Du coup il n'est pas fondamentalement impossible en soi que l'OCX ait été elle aussi modifiée ...

signaler à un administrateur
Commentaire de Ouneufe le 03/12/2003 21:51:04

ça marche sous xp

Y aurait-il un truc pour le schéma inverse, c'est à dire récupérer le Smiley depuis l'image ?

signaler à un administrateur
Commentaire de Greengold le 03/12/2003 22:39:04

Pour Tidus :
C'est possible qu'un ocx soit altéré et que ça plante. Mais personnellement j'opte plutôt pour explication du style : sous win 98 l'api sendMessageA n'existe d'où le plantage. Mais comme je l'avais déjà dit, j'ai pas win 98 donc je peux pas le tester moi même :(

Pour Ouneufe :
Oui c possible. On part du principe qu'on a une RichTextBox avec du texte et une image dedans. Le tout consiste d'abord à récupérer l'intégralité du code de l'image. Il suffit de détecter, dans le format RichTextFile, cette chaine : "{pict", puis de récupérer les données de l'image entre cette chaine et la prochaine "}". (A tester)
Une fois le code du smiley affecté à une variable, il faut le comparer (selon ma méthode) avec tous les fichiers.rtf stockés préalablement sur le disque et correspondant à tous les codes rtf des smileys que l'on possède (opération relativement lourde).
Dès que l'on sait à quel fichier.rtf appartient le code original, on en déduit le vrai smiley :)

Merci pour vos commentaires.

signaler à un administrateur
Commentaire de Ouneufe le 04/12/2003 00:06:29

Merci pour ta réponse précise et encore bravo.

signaler à un administrateur
Commentaire de mythic_kruger le 01/02/2004 15:00:36

En effet le contrôle de win98SE est antérieur à celui de XP, tu as donc bien fait de l' ajouter dans le zip. Pour l' enregistrer proprement, la méthode la plus répandue est de copier le OCX et OCA dans Windows/System, puis de glisser/déposer le OCX sur regserv32.exe (qui est non loin de richtext32.ocx), un message apparait confirmant l' enregistrement du contrôle. La commande Exécuter fonctionne également.
Beau boulot Greengold :^) Tu as un nouveau message ;D

signaler à un administrateur
Commentaire de amadeuss le 04/02/2004 14:10:28

simplement merci !!!
source tres pédagogique...

signaler à un administrateur
Commentaire de LagPhil le 21/06/2004 07:59:43

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 !

signaler à un administrateur
Commentaire de peug le 06/11/2004 08:50:28

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 ?

signaler à un administrateur
Commentaire de cbnet le 07/02/2005 18:38:10

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

@+

signaler à un administrateur
Commentaire de Geff le 11/02/2005 11:00:54

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...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,562 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.