RichEdit [Résolu]

Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
- - Dernière réponse : ncoder
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
- 27 mars 2006 à 09:31
Bonjour à tous,

Dans un de mes programmes, j'ai un RichEdit.
J'y ajoute du texte auquel je mets la couleur que je veux.
Le seul problème est que dès que je change la police de caractère de ce RichEdit, les couleurs ne s'affichent plus !!!

Voici le code :

// chargement du contrôle richedit
HINSTANCE Dll = LoadLibrary("RICHED32.DLL");

Log = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, RICHEDIT_CLASS, "", WS_CHILD|ES_READONLY|ES_WANTRETURN|
WS_VISIBLE|ES_MULTILINE|WS_VSCROLL|ES_AUTOVSCROLL|ES_WANTRETURN,
15, 255, 465, 200, hwnd, (HMENU)10, hThisInstance, NULL);

SendMessage(Log, WM_SETFONT, (WPARAM) Police, MAKELPARAM(TRUE, 0)); ==> sans cette ligne, les couleurs s'affichent sans pb.

Merci de votre aide
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
5
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 mars 2006
3
Merci
Oui, Max12 a raison, il ne faut pas utiliser WM_SETFONT mais envoyer le fond (avec la couleur) depuis une sructure CHARFORMAT2...

CHARFORMAT2 Format;

memset(&Format, 0, sizeof(CHARFORMAT2));
Format.cbSize = sizeof(CHARFORMAT2);
Format.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE |CFM_UNDERLINE;
Format.dwEffects = 0; // style (gras/italique/souligné
// CFM_BOLD/CFM_ITALIC/CMF_UNDERLINE
Format.crTextColor RGB(255, 0, 0); // la couleur du texte : 255, 0, 0> rouge
Format.yHeight = 180; // la hauteur du texte
Format.yOffset = 0;
Format.bCharSet = ANSI_CHARSET;
Format.bPitchAndFamily = DEFAULT_PITCH;
strcpy(Format.szFaceName, "Arial"); // où "Arial" est la police à utiliser
SendMessage(hwnd/*HWND du richedit*/, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &Format); // Envoie la police (Format) au richedit

Merci cs_Sparow 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Sparow
Messages postés
5
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 mars 2006
3
Merci
Crée un CHARFORMAT2 comme expliqué dans mon dernier message et envoie le a cette fonction :


bool add_text(const HWND &hwnd/*Le HWND de ton RichEdit*/, string new_txt/*le texte à ajouter*/, CHARFORMAT2 Format/le CHARFORMAT2 créé plus haut^^*/)
{
#ifdef WIN32
SendMessage(hwnd, EM_SETSEL, (WPARAM)length, (LPARAM)length); // crée un point d'insertion

#else
SendMessage(hwnd, EM_SETSEL, 0, MAKELONG(length, length));

#endif

SendMessage(hwnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &Format);
SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)(LPCTSTR)new_txt.c_str());
//SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0); // fait descendre automatiquement le scroll de ta RicheEdit
return 0;
}

Merci cs_Sparow 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Sparow
Messages postés
1496
Date d'inscription
dimanche 19 novembre 2000
Dernière intervention
7 juillet 2014
0
Merci
Je ne suis pas sûr, mais je crois que faire SETFONT c'est mal sur un RichEdit car il va faire comme si c'était un éditbox et effacer toutes mises en formes. Il faut utiliser un autre message (mais je ne le connais pas) regarde dans le CHARFORMAT2 te servant à mettre la couleur.

A+

http://vbaddons.free.fr
MSN : x_men_40(
Commenter la réponse de cs_max12
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
0
Merci
Merci à vous deux je vais essayer le code !

A+
Commenter la réponse de ncoder
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
0
Merci
Non ça marche pas !!

Que puis-je faire svp ?

Merci
Commenter la réponse de ncoder
Messages postés
5
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 mars 2006
0
Merci
Il faut aussi que tu utilises "InitCommonControls()" avt de charger "RICHED32.DLL":


InitCommonControls()

(aucun argument)

défini dans "commctrl.h"


Ca marche, j'ai tapé cette fonction (add_text() ^^) pour ajouter du texte dans un richedit multicolore d'un de mes programmes (chat)
Après, si ça va tjrs pas, balance du code :d

A+
Commenter la réponse de cs_Sparow
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
0
Merci
Merci je regarde tout ça
Commenter la réponse de ncoder
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
0
Merci
J'ai traduit ta fonction en C, pas de problèmes, tout marche !

Merci beaucoup de ton aide !

A+
Commenter la réponse de ncoder

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.