Couleur de fond du texte sélectionné dans un richEdit

Résolu
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007 - 23 sept. 2004 à 13:54
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 - 27 sept. 2004 à 10:22
Hello,

y aurait quelqu un qui saurait comment on peut changer ou connaitre la couleur de fond d un texte sélectionné dans une richEdit. Je ne vois vraiment pas comment faire ???

Merci d'avance...

Arnaud

21 réponses

arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
26 sept. 2004 à 14:36
YES, I found it......

Ca y est, j ai trouvé.....

uses
RichEdit;

procedure RE_SetSelBgColor(RichEdit: TRichEdit; AColor: TColor);
var
Format: CHARFORMAT2;
begin
FillChar(Format, SizeOf(Format), 0);
with Format do
begin
cbSize := SizeOf(Format);
dwMask := CFM_BACKCOLOR;
crBackColor := AColor;
Richedit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
end;
end;

// Example: Set clYellow background color for the selected text.
procedure TForm1.Button1Click(Sender: TObject);
begin
RE_SetSelBgColor(RichEdit1, clYellow);
end;

Arnaud
3
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
23 sept. 2004 à 14:25
Bonjour Arnaud!

Vous pouvez voir mon source déposé sur le site couleurRGB, ça devrait aider!

jlmcom :)
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
23 sept. 2004 à 14:39
Merci pour ton aide mais comment je fais pour trouver ton code, car je n ai pas trop envie de me parcourir les 1 773 sources. et j ai tapé couleurRGB dans le moteur de recherche il ne trouve pas...

Arnaud
0
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
23 sept. 2004 à 19:45
OK
Mon dépot de source est récent, mais n'a pas encore été référencé par le moteur du site.
Bon, voilà un extrait de code qui devrait vous aider:

var
  Form1 : TForm1;
  R,G,B : Byte;

implementation

{$R *.DFM}
Procedure TForm1.Affiche_Couleur(R,G,B : Byte);
begin
  Panel3.Color:=RGB(R, G ,B);
  Label2.Caption := Inttostr(R);//affichage de la valeur décimale
  Label4.Caption := Inttostr(G);
  Label6.Caption := Inttostr(B);
  Label13.Caption := '$'+IntToHex(ScrollBar1.position,4)
                     +IntToHex(ScrollBar2.position,2)
                     +IntToHex(ScrollBar3.position,2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  R :=$00B0;
  G :=$C5;
  B :=$E0;
  Affiche_Couleur(R,G,B);
end;



Vous pouvez directement donnée la valeur d'une couleur dans
richedit.color := $00B0C5E0;

jlmcom :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
23 sept. 2004 à 19:52
ça y est! le source CouleurRGB est disponible! Cliquez sur source jlmcom et c'est dans la poche!
jlmcom ;)
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
23 sept. 2004 à 20:13
merci, mais je ne pense pas que ce code puisse m aider. Dans mon cas on est dans un richEdit et je ne veux pas modifier tout l arriere plan de mon RichEdit ni ajouter des panels alors que je ne sais pas combien de mot seront surligné... A moins que je ne t aie pas compris, Mais merci bien pour ton aide...

Arnaud
0
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
24 sept. 2004 à 08:25
Désolé Arnaud :blush)
je suis allé un peu vite en besogne! Voilà ce que c'est que de faire 10 choses à la fois!

Bon, voilà un bout de code exemple qui devrait vous aider. L'évènement a lieu lors d'un appui sur un bouton:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 Richedit1.SelectAll;
 if fsbold in Richedit1.SelAttributes.Style then
 begin
   Richedit1.SelAttributes.Style:=richedit1.SelAttributes.style-[fsbold];
   Richedit1.SelAttributes.Color:=ClBlack;
 end else
 begin
   Richedit1.SelAttributes.Style:=richedit1.SelAttributes.style+[fsbold];
   Richedit1.SelAttributes.Color:=ClRed;
 end;
end;

Il vous reste à écrire la partie que vous souhaitez isoler pour une mise en évidence!

J'espère que ça conviendra!
Bonne prog!

jlmcom :)
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
24 sept. 2004 à 10:12
Merci mais je ne pense pas que ca convienne. Je sais modifier la couleur du texte comme tu me le montres mais ce que j aimerais c est trouver comment modifier la couleur de fond pas la couleur de devant. Il faudrait que j ai acces au canvas du richEdit mais ne sais pas comment faire. J ai essaye en changeant le brush du richEdit, il ne veux rien savoir.... J espere qu il y a une solution avec une petite API Windows je pense mais laquelle.... Enfin merci quand meme.

Arnaud
0
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
24 sept. 2004 à 11:13
Alors là c'est autre chose. je ne sais pas faire à priori!

1. Ce problème m'intéresse car je vais à voir à faire la même chose, sauf que je n'ai pas décidé si j'utilisai un Richedit (> 1 million de caractères, c'est pas sûr qu'il accepte. J'avais donc pensé travailler directement dans une fenêtre qui offre à mon avis plus de possibilités du genre rencontré ici.

2. mais je ne me suis pas encore penché desus! Je n'ai pas le temps en ce moment!

3. A mon avis il faut accéder à la propriété de TFont, en admettant que le richedit ne les bloque pas. Passer par un handle de Font système.

4. Une autre possibilité est envisageable: définir un texte graphique suxerposé par dessus la zone du Richedit avec le brush en arrière plan. Mais s'il y a de nombreux mots à mettre en évidence, le mieux serait de travailler en graphique directement sur la fenêtre ou un canevas de fenêtre..

5. Si j'ai des idées je vous tiens au courant!

Merci de m'informer sur vos progrès. Ce sujet m'intéresse!!

jlmcom :)
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 sept. 2004 à 10:35
Extrait de l'aide en ligne à propos de la propriété SelAttributes du composant TRichEdit :
Décrit les caractéristiques de formatage du texte sélectionné dans le contrôle éditeur de texte formaté.
.
Voir les exemples fournis.
On cherche parfois des solutions compliquées là où des solutions simples existent déjà :big)
0
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
25 sept. 2004 à 11:55
Bonjour Delphiprog!
Je crois que l'on a des :clown) échanges qui se sont égarés! ?-)

Bon, alors là je nage encore une fois!
je suis un éternel débutant...

Sommes nous d'accord sur le pb? Je crois qu'arnaud souhaite une couleur de fond sous son texte sélectionné et non pas dans tout le controle.
Or dans Richedit, Brush n'est pas accessible, même apparamment par Selattributes. est-ce que je dis des connerie? %-6

Il n'accepte pas par exemple la ligne suivante:

    Richedit1.SelAttributes.Brush.Color:=Clyellow;;



jlmcom :)
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 sept. 2004 à 17:06
J'ai bien relu la question à l'origine et qui précise bien "changer ou connaitre la couleur de fond d un texte sélectionné dans une richEdit".

Pour changer la couleur du fond de l'ensemble du composant TRichEdit, nous savons tous qu'il suffit de changer la propriété Color du composant lui-même.

Alors, pour savoir comment utiliser cette propriété SelAttributes, je vous renvoie à l'exemple fourni dans l'aide en ligne ou aux exemples fournis avec Delphi.

Nous serons toujours d'éternels débutants dans un domaine ou dans un autre. Ne te désespère donc pas. %-6

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
25 sept. 2004 à 18:36
Bon OK delphiProg!

  Richedit1.color := ClRed;


Mais je n'avais pas l'impression que c'est que voulait Arnaud!
Est-ce cela que vous vouliez, Arnaud?
"Changer la couleur de fond du controle ou seulement la couleur de fond de certains mots? "

Si nous avons répondu à voitre question, merci de confirmer en cliquant sur réponse acceptée. ça fait plus propre!

Dommage quand même que ce composant ne permette pas à ma connaissance de mettre une couleur derrière une partie de texte seulement. C'est pour cette raison que j'envisageai de travailler sur fenêtre directement.

jlmcom ;)
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
25 sept. 2004 à 20:21
ben non la réponse n 'est pas trouvé. Effectivmeent je veux mettre certains mots avec une couleur de fond différente que dans tout le reste du texte... Et effectivment la propriété selAttributes ne convient pas. Je mets dejà des mots de couleurs différentes aucun probleme. Mais le fond, je n y arrive pas. Je pense que la seule solution est de trouver l'api Windows qui me donnera le handle du canvas et je pense que je pourrais changer le brush de ce canvas pour en modifier le fond avant d'écrire mes mots...

En tout cas merci pour votre aide.

Arnaud
0
jlmcom Messages postés 57 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 3 décembre 2004 2
25 sept. 2004 à 20:58
Bon histoire de proposer. DEpuis Borland pascal, je n'utilise pratiquement plus les api. Voici quelques idées de fonctions qu'il faut chercher dans l'aide delphi. Si vous avez le marabout (1000 fonctions de programmation de windows 95, vous devriez y arriver. Ce livre n'est plus disponible, on se demande pourquoi?)

1. Il y a la fonction Getobject qui récupère des infos sur les bitmaps, Font et pinceaux...Ou GetstockObject, ou Graystring...

2. pour obtenir le handle de canvas, c'est pas compliqué:

var   H : HDC;
begin
  H := Canvas.Handle;
...
end;


3. Mais à mon avis le problème, c'est que richEdit doit protéger sa zone et drawtext ne pourra pas écrire par dessus. J'ai d'ailleurs eu ce problème avec la fonction Pixels ou rectangle qui refusait d'écrire par dessus un controle qui se trouvait sur la zone balayée.

Par exemple :
  H := Canvas.Handle;
  For x :=100 to 200 do
    for y := 50 to 400 do
    begin
      windows.SetPixel(H,x,y,clYellow);
    end;


4. le problème serait le même à mon avis avec la fonction API Rectanglke ou Drawtext. donc à mon sens ce qu'il faut trouver c'est une fonction qui récrive ou dessine par dessus le controle. A mon avis c'est faisable avec du code API, en dévalidant la protection du richedit....

A suivre.

jlmcom :)
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
25 sept. 2004 à 21:33
Merci pour ces infos mais le RichEdit ne fournit pas de canvas, c est bien le probleme pourtant il doit bien y en avoir un mais Delphi ne donne pas acces.... C est pour ca que je pensais utiliser un API windows pour récupérer le canvas du richEdit...

du style GetCanvas(RichEdit) : hdc;

mais je ne la connais pas.....

Arnaud
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 sept. 2004 à 22:08
Arnaud, il faudrait être plus clair sur ce que tu veux obtenir. Si l'on regarde le titre et le contenu de ton premier post, il s'agit bien du texte sélectionné.

Maintenant, c'est du texte non sélectionné que tu veux colorier.

Puis-je te demander pour quel usage ?
Parce qu'on pourrait peut-être te proposer des composants ou méthodes plus appropriés pour que tu parviennes à tes fins, au lieu d'allonger une discussion dont le sujet change du tout au tout en cours de route.
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
25 sept. 2004 à 22:38
Heu...., pourtant je pense etre tres clair que le texte soit selectionne ou non ne change pas le probleme... Je pensais le sélectionner automatiquement pour plus facilement changer les propriétés et donc la couleur du fond, mais le selAttributes ne permet pas de changer la couleur de fond, c est pourtant clair la couleur derriere le texte je voudrais la modifier... mais j y arrive pas... la question initiale reste la meme..... Apres si tu connais d autre composants qui font aussi bien que le richEdit, et avec le quel on peut changer la couleur de fond de certain mots... chui preneur.... voilou....

Arnaud
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 sept. 2004 à 15:34
Super !!
Peux-tu mettre ça en code source pour que l'on puisse le retrouver plus facilement ?
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
26 sept. 2004 à 15:51
Oki, c est fait. J ai meme ajouté la récupération de la couleur du texte sélectionné....

Arnaud
0
Rejoignez-nous