IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

TRichEdit & bitmap [Sources]


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Par d�faut TRichEdit & bitmap
    Bonsoir � tous.
    Je ne sais quel composant bcb utiliser pour afficher du texte et des images bmp. Je cherche en fait � pouvoir ins�rer des smileys dans le cadre d'un "chat". En fait, pour ceux qui visualisent les fen�tres de dialogues d' msn messenger, c'est exactement ce qui me conviendrait
    Pour l'instant j'utilise un TRichEdit qui n'est ma fois pas trop mal.

    J'ai vu que ce composant supporte le RTF, donc je me suis dit youhou dans ce cas pas de pb, vu que ce format permet l'insertion de bmp. Afin de tester, j'ai donc cr�� un fichier RTF dans lequel j'ai mis du texte format� ainsi qu'un petite image bitmap:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    TMemoryStream* fd = new TMemoryStream(); 
    fd->LoadFromFile("fichier.rtf");
    RichEdit1->Lines->LoadFromStream(fd);
    Le pb est qu'� l'affichage, dans mon RichEdit, seul le texte appara�t et pas l'image, ce qui est fort regrettable lol.
    Par cons�quent si quelqu'un connait une astuce, ou mieux un composant plus appropri� � cet usage, je suis preneur.

    Par avance merci.

  2. #2
    Membre chevronn�


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855

  3. #3
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Par d�faut
    Bonsoir Ricky81.
    Je connaissais en effet ce post, mais je me demandais s'il n'y avait pas un moyen plus simple sans devoir utiliser une classe d�velopp�e sp�cialement pour r�soudre ce pb.
    Je vais regarder comment �a fonctionne, et j'en d�duis donc qu'un RichEdit n'est vraiment pas souple pour m�langer txt & image.

  4. #4
    Membre chevronn�


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par d�faut
    Bonsoir,

    il me semble avoir lu que le RichEdit ne pouvait pas prendre ceci en charge.
    Je pense que tu n'as que ca comme solution pour l'instant.
    Tiens nous au courant si tu suis cette piste, on n'a jamais eu de retour sur ce composant...

    Bon courage

    Eric

  5. #5
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Par d�faut
    Re bonsoir.
    Bon apr�s avoir essay� d'utiliser la classe donn�e dans le lien sans succ�s (ca compile mais pas le r�sultat escompt� :p) je pense que je vais abandonner cette id�e.
    D'ailleurs je trouve la classe pauvre en m�thodes (genre 5 ou 6) Je suis compl�tement n�ophyte en mati�re de composants OLE mais il me semble que ce n'est pas trop une classe adapt�e pour ins�rer facilement des images ds un richedit. De plus cette classe d�te de 1998, l'auteur dit qu'elle marche sous BCB... 3.0 ^^
    Enfin voil� quoi, si je m'y connaissais suffisamment je me serais attard� plus longuement sur le probl�me, mais l� :p
    C'est quand m�me bizarre qui bcb ne dispose pas d'un tel style de composant, je trouve que �a pourrait �tre bien utile, vu qu'apparemment je ne suis pas le seul � m'�tre heurt� � ce genre de difficult�s.

    Pour finir, je ne sais pas trop quel tag mettre � ce post lol. [Echec critique] ? [Non Suivi] ? :-)

    Merci quand m�me en tout cas.

  6. #6
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Par d�faut
    Bonsoir !
    Etant d'un naturel t�tu je reviens sur ce probl�me un mois apr�s, car apr�s de nombreuses recherches j'ai un peu avanc�.. Pour l'instant rien ne marche lol, mais je suis persuad� que je ne suis pas loin de la solution. Voil� un lien extr�mement int�ressant que j'ai trouv�:

    http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/

    Sur cette page tr�s bien faite, l'auteur explique comment il s'y est pris pour parvenir � ce "prodige" :-) , et je dois avouer que l'ex�cutable t�l�chargeable est impressionnant (pour moi en tout cas, car c'est exactement ce que je souhaite parvenir � faire). Preuve � l'appui, il est donc tout � fait possible d'ins�rer une image de type bitmap dans un RichEdit.
    Si je me permets de poster ce message, c'est pour solliciter de l'aide aupr�s de ceux qui se sentent le courage de mettre en application ce tutorial.
    Certes le code fourni utilise essentiellement des API windows et la MFC, d'ailleurs moi qui ne suis pas dou� j'vous raconte pas la gal�re pour int�grer et compiler les seuls fichiers qui importent, � savoir:

    ImageDataObject.h
    ImageDataObject.cpp
    StdAfx.h
    StdAfx.cpp

    Donc pour le moment voil� o� j'en suis: �a compile (c'est d�j� �a mdr)
    La fonction principale � appeler est la suivante:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CImageDataObject::InsertBitmap(IRichEditOle* pRichEditOle, HBITMAP hBitmap)
    Voil� ce que moi je fais :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    IRichEditOle * pRichEditOle;
     
    SendMessage((HWND) WindowDial->Handle,
                         (UINT)EM_GETOLEINTERFACE,
                          0,
                         (LPARAM)&pRichEditOle);
     
    CImageDataObject * pDataObj = new CImageDataObject;
    Graphics::TBitmap  * pBmp  = new Graphics::TBitmap;
     
    pBmp->LoadFromFile("image.bmp");
     
    pDataObj->InsertBitmap(pRichEditOle, pBmp->Handle);
    Je sais que mon pointeur pRichEditOle est valide. J'imagine que mon Handle Bitmap l'est �galement.
    Pourtant, lorsque la fonction GetOleObject() est appel�e, j'ai une exception MFC qui se d�clenche:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    External exception EEFFACE.
    Pour le moment je ne sais pas � quoi elle correspond. Si quelqu'un avait un peu de temps pour tester et me dire o� je me suis plant�, ou du moins s'il rencontre le m�me type de difficult�, ce serait bien sympatique de sa part. Je continue pour ma part � chercher (enfin heu mnt bedtime quand m�me :p)

    D'avance merci.

  7. #7
    Membre �prouv�

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par d�faut
    A mon avis ce que tu fais reviens en m�me que d'utiliser le lien qu'on t'a donn� plus haut. Ce n'est pas un RichEdit standard mais un RichEditOle que tu utilises, ce qui devait �tre impl�ment� dans la classe TRichEditOle dont le lien se trouve un peu plus haut et qui t'aurais donc �viter de faire du MFC...
    Maintenant ce n'est qu'un avis de spectateur, je ne me suis jamais int�ress� au probl�me.

  8. #8
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Par d�faut
    Salut Neilos.
    Certes dans les deux cas on manipule des RichEditOle, seulement dans le premier lien je t'assure que le code est 10 foix plus dense et plus complexe, je n'y ai strictement rien capt� pour �tre honnete. J'avais r�ussi � le faire fonctionner en fait finalement, mais il se trouve qu'� l'utilisation �a appelle une boite de dialogue (ressemblante � celle qu'on retrouve dans les �diteurs de texte format RTF pour ins�rer des cliparts) d'o� on choisit le fichier image � ins�rer.
    Moi je ne veux en aucun cas s�lectionner une image via une boite de dialogue qu'on m'impose (tu testeras si tu veux pour voir l'horreur que �a rend :p)
    A+

  9. #9
    Membre �prouv�

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par d�faut
    Ok, t'inqui�te jte crois sur parole..juste la ressemblance du nom m'avait frapp� et j'avais entendu dire que les MFC c'est bof...maintenant je ne connais strictement rien en MFC.

    L'essentiel �tant que ton probl�me soit r�solu.

  10. #10
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    ou mieux un composant plus appropri� � cet usage, je suis preneur.
    Le RXRichedit de la RXLib
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  11. #11
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Par d�faut
    Merci beaucoup CGI. Je ne connaissais pas l'existence de ce composant. Je viens d'installer la rxLib, et j'avoue que je suis bluff� par le RxRichEdit.
    Reste maintenant � impl�menter la m�thode d'insertion. J'ai vu sur un forum delphi le code d'une fonction qui g�n�re du RTF � partir d'un bitmap. Je vais tenter d'adapter la fonction en C++, et puis on verra bien ce qui arrivera ma fois.
    Je vous tiens au courant, et merci encore.

  12. #12
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Par d�faut
    CGI & la RXLib :-)

    Re donc. Je n'ai pas eu � r��crire la fonction BitmapToRTF() finalement, en cherchant sur google j'ai trouv� mon bonheur.
    Il a fallu que je fasse qd m�me qq petites modifs car sinon j'obtenais sur le RxRichEdit des images d'une pi�tre qualit�, comme si elles �taient en 16 couleurs.. Y avait un souci dans l'extraction des nombres hexa, bref.
    Je vous poste le code de la fonction que j'utilise.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    AnsiString BitmapToRTF(Graphics::TBitmap *pict)
    {
         Cardinal bis, bbs, I;
         AnsiString bi, bb, hexpict, achar;
         AnsiString rtf = "{\\rtf1 {\\pict\\dibitmap ";
     
         //On récupère la taille du header & la taille de l'image
         GetDIBSizes(pict->Handle, bis, bbs);
     
         bi.SetLength(bis);
         bb.SetLength(bbs);
     
         //On stocke les infos header et data respectivement dans des char tab bi & bb
         GetDIB(pict->Handle, pict->Palette, &((bi.c_str())[0]), &((bb.c_str())[0]));
     
         hexpict.SetLength((bi.Length() + bb.Length()) * 2);
         I = 1;
     
         for (bis = 0; bis < bi.Length(); bis++) //Partie header du bmp
         {
              achar = IntToHex((int)((bi.c_str())[bis]), 2);
              const int SizeHexa = achar.Length();
     
              if (SizeHexa == 1)
                  achar = "0" + achar;
     
              else //On a affaire à des puissances de 2
              {
                   (hexpict.c_str())[I-1] = (achar.c_str())[SizeHexa -2];
                   (hexpict.c_str())[I]   = (achar.c_str())[SizeHexa -1];
              }
     
             I += 2;
         }
     
         for (bbs = 0; bbs < bb.Length(); bbs++) //Partie "data" du bmp
         {
              achar = IntToHex((int)((bb.c_str())[bbs]), 2);
              const int SizeHexa = achar.Length();
     
              if (SizeHexa == 1)
                  achar = "0" + achar;
     
              else //On a affaire à des puissances de 2
              {
                   (hexpict.c_str())[I-1] = (achar.c_str())[SizeHexa -2];
                   (hexpict.c_str())[I]   = (achar.c_str())[SizeHexa -1];
              }
     
              I += 2;
         }
     
         return (rtf + hexpict + " }}");
     
    } //BitmapToRTF()
    Ensuite, pour ins�rer l'image, je fais �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    Graphics::TBitmap * bmp = new Graphics::TBitmap;
    bmp->LoadFromFile("image.bmp");
     
    TStringStream *SS = new TStringStream(BitmapToRTF (bmp));
    RxRichEdit->Lines->LoadFromStream(SS);
    delete SS;
    Et l� le miracle op�re. Ca marche nickel. J'ai pris la peine de mettre un peu de code car je pense que �a pourra servir � d'autres.
    Ptite remarque en passant: �a marche, par contre l'image affich�e dans le rxRichEdit est redimentionnable...
    C'est pas trop le top - franchement pas m�me - mais j'ai vu sur le forum Delphi une astuce que j'essairai d'appliquer (c'est pas gagn� mdr)
    Ceci est une autre histoire :-)

    ++
    Run.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 08/10/2002, 18h26
  2. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    R�ponses: 5
    Dernier message: 29/07/2002, 00h40
  3. Pb Lecture de bitmap monochrome
    Par Lo�c38 dans le forum C++Builder
    R�ponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    R�ponses: 18
    Dernier message: 28/06/2002, 12h01
  5. Comment faire pour cr�er un bitmap
    Par GliGli dans le forum C++Builder
    R�ponses: 2
    Dernier message: 24/04/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo