Accueil > > > GESTION DE SMILEYS AVEC RICHTEXTBOX
GESTION DE SMILEYS AVEC RICHTEXTBOX
Information sur la source
Description
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 ;)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB.NET ET COMBOBOXVB.NET ET COMBOBOX par minouthebreaker
Cliquez pour lire la suite par minouthebreaker
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|