cs_Geff
Messages postés192Date d'inscriptionvendredi 2 mars 2001StatutMembreDernière intervention10 janvier 2006 11 févr. 2005 à 11:00
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és176Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 7 mars 2005 7 févr. 2005 à 18:38
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és232Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 5 octobre 2012 6 nov. 2004 à 08:50
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és8Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention20 août 2009 21 juin 2004 à 07:59
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 !
cs_amadeuss
Messages postés8Date d'inscriptionlundi 15 décembre 2003StatutMembreDernière intervention 1 avril 2004 4 févr. 2004 à 14:10
simplement merci !!!
source tres pédagogique...
mythic_kruger
Messages postés241Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention10 novembre 2005 1 févr. 2004 à 15:00
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
cs_Ouneufe
Messages postés60Date d'inscriptionmardi 4 septembre 2001StatutMembreDernière intervention19 janvier 2009 4 déc. 2003 à 00:06
Merci pour ta réponse précise et encore bravo.
Greengold
Messages postés57Date d'inscriptionmercredi 16 octobre 2002StatutMembreDernière intervention31 mars 2004 3 déc. 2003 à 22:39
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.
cs_Ouneufe
Messages postés60Date d'inscriptionmardi 4 septembre 2001StatutMembreDernière intervention19 janvier 2009 3 déc. 2003 à 21:51
ç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 ?
cs_Tidus
Messages postés78Date d'inscriptiondimanche 21 avril 2002StatutMembreDernière intervention 7 juillet 2003 3 déc. 2003 à 17:25
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 ...
cs_Ouneufe
Messages postés60Date d'inscriptionmardi 4 septembre 2001StatutMembreDernière intervention19 janvier 2009 2 déc. 2003 à 12:36
j'ai pas testé ce source (ni vérifié l'ocx) mais à priori c'est d'enfer. Je vais tester de ce pas.
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 2 sept. 2003 à 17:34
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...
Greengold
Messages postés57Date d'inscriptionmercredi 16 octobre 2002StatutMembreDernière intervention31 mars 2004 2 sept. 2003 à 01:16
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.
jockos
Messages postés321Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention14 mai 20052 1 sept. 2003 à 23:21
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 ...".
Greengold
Messages postés57Date d'inscriptionmercredi 16 octobre 2002StatutMembreDernière intervention31 mars 2004 1 sept. 2003 à 21:14
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é...
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 1 sept. 2003 à 18:23
Idem chez moi... Ca ne marche pas Win98 SE et VB6 SP5
Greengold
Messages postés57Date d'inscriptionmercredi 16 octobre 2002StatutMembreDernière intervention31 mars 2004 31 juil. 2003 à 11:35
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.
cs_Tidus
Messages postés78Date d'inscriptiondimanche 21 avril 2002StatutMembreDernière intervention 7 juillet 2003 31 juil. 2003 à 11:29
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 ?
Greengold
Messages postés57Date d'inscriptionmercredi 16 octobre 2002StatutMembreDernière intervention31 mars 2004 30 juil. 2003 à 21:20
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 :)
cs_LosAmigos
Messages postés13Date d'inscriptionlundi 5 novembre 2001StatutMembreDernière intervention 9 octobre 2006 30 juil. 2003 à 11:13
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.
cs_Tidus
Messages postés78Date d'inscriptiondimanche 21 avril 2002StatutMembreDernière intervention 7 juillet 2003 27 juil. 2003 à 17:30
Cette source, je l'attendais depuis longtemps ... Avec ça il y a moyen de supplanter MSN messenger ... Gnark ! lol
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 24 juil. 2003 à 12:13
oui excelent !!!
jockos
Messages postés321Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention14 mai 20052 23 juil. 2003 à 23:14
Intelligeament cogité... de la bonne bidouille mais bien clean.
Bien vu ;)
eka808
Messages postés72Date d'inscriptiondimanche 24 novembre 2002StatutMembreDernière intervention29 avril 2005 23 juil. 2003 à 20:58
très bien
Cyberdevil
Messages postés483Date d'inscriptionmardi 10 juillet 2001StatutMembreDernière intervention12 juillet 2006 23 juil. 2003 à 20:45
coool comme méthode ouuuu jaime :) ! non mais bravo ! 10/10
11 févr. 2005 à 11:00
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...
7 févr. 2005 à 18:38
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
@+
6 nov. 2004 à 08:50
21 juin 2004 à 07:59
4 févr. 2004 à 14:10
source tres pédagogique...
1 févr. 2004 à 15:00
Beau boulot Greengold :^) Tu as un nouveau message ;D
4 déc. 2003 à 00:06
3 déc. 2003 à 22:39
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.
3 déc. 2003 à 21:51
Y aurait-il un truc pour le schéma inverse, c'est à dire récupérer le Smiley depuis l'image ?
3 déc. 2003 à 17:25
2 déc. 2003 à 12:36
2 sept. 2003 à 17:34
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...
2 sept. 2003 à 01:16
Je compte sur toi programmix pour tester et me donner des nouvelles.
1 sept. 2003 à 23:21
Utilisez la version de ce controle ocx fournit avec XP et n'oubliez pas de l'inscrire dans la base de registre avec "regsvr32 ...".
1 sept. 2003 à 21:14
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é...
1 sept. 2003 à 18:23
31 juil. 2003 à 11:35
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.
31 juil. 2003 à 11:29
30 juil. 2003 à 21:20
Je pense pas que ça vienne de win98... Donc là, je séche :)
30 juil. 2003 à 11:13
27 juil. 2003 à 17:30
24 juil. 2003 à 12:13
23 juil. 2003 à 23:14
Bien vu ;)
23 juil. 2003 à 20:58
23 juil. 2003 à 20:45