RichEdit [Résolu]

ncoder 244 Messages postés vendredi 6 mai 2005Date d'inscription 6 avril 2008 Dernière intervention - 23 mars 2006 à 18:35 - Dernière réponse : ncoder 244 Messages postés vendredi 6 mai 2005Date d'inscription 6 avril 2008 Dernière intervention
- 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
cs_Sparow 5 Messages postés vendredi 3 novembre 2000Date d'inscription 30 mars 2006 Dernière intervention - 24 mars 2006 à 23:00
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_Sparow
Meilleure réponse
cs_Sparow 5 Messages postés vendredi 3 novembre 2000Date d'inscription 30 mars 2006 Dernière intervention - 26 mars 2006 à 18:56
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_Sparow
cs_max12 1496 Messages postés dimanche 19 novembre 2000Date d'inscription 7 juillet 2014 Dernière intervention - 23 mars 2006 à 18:48
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
ncoder 244 Messages postés vendredi 6 mai 2005Date d'inscription 6 avril 2008 Dernière intervention - 25 mars 2006 à 19:10
0
Merci
Merci à vous deux je vais essayer le code !

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

Que puis-je faire svp ?

Merci
Commenter la réponse de ncoder
cs_Sparow 5 Messages postés vendredi 3 novembre 2000Date d'inscription 30 mars 2006 Dernière intervention - 27 mars 2006 à 02:40
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
ncoder 244 Messages postés vendredi 6 mai 2005Date d'inscription 6 avril 2008 Dernière intervention - 27 mars 2006 à 09:26
0
Merci
Merci je regarde tout ça
Commenter la réponse de ncoder
ncoder 244 Messages postés vendredi 6 mai 2005Date d'inscription 6 avril 2008 Dernière intervention - 27 mars 2006 à 09:31
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.