Couleur de fond du texte sélectionné dans un richEdit [Résolu]

arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 23 sept. 2004 à 13:54 - Dernière réponse : jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention
- 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
Afficher la suite 

21 réponses

Répondre au sujet
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 26 sept. 2004 à 14:36
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de arnaud_tournier
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 23 sept. 2004 à 14:25
0
Utile
Bonjour Arnaud!

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

jlmcom :)
Commenter la réponse de jlmcom
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 23 sept. 2004 à 14:39
0
Utile
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
Commenter la réponse de arnaud_tournier
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 23 sept. 2004 à 19:45
0
Utile
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 :)
Commenter la réponse de jlmcom
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 23 sept. 2004 à 19:52
0
Utile
ça y est! le source CouleurRGB est disponible! Cliquez sur source jlmcom et c'est dans la poche!
jlmcom ;)
Commenter la réponse de jlmcom
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 23 sept. 2004 à 20:13
0
Utile
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
Commenter la réponse de arnaud_tournier
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 24 sept. 2004 à 08:25
0
Utile
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 :)
Commenter la réponse de jlmcom
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 24 sept. 2004 à 10:12
0
Utile
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
Commenter la réponse de arnaud_tournier
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 24 sept. 2004 à 11:13
0
Utile
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 :)
Commenter la réponse de jlmcom
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 25 sept. 2004 à 10:35
0
Utile
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)
Commenter la réponse de cs_Delphiprog
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 25 sept. 2004 à 11:55
0
Utile
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 :)
Commenter la réponse de jlmcom
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 25 sept. 2004 à 17:06
0
Utile
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.
Commenter la réponse de cs_Delphiprog
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 25 sept. 2004 à 18:36
0
Utile
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 ;)
Commenter la réponse de jlmcom
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 25 sept. 2004 à 20:21
0
Utile
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
Commenter la réponse de arnaud_tournier
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 25 sept. 2004 à 20:58
0
Utile
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 :)
Commenter la réponse de jlmcom
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 25 sept. 2004 à 21:33
0
Utile
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
Commenter la réponse de arnaud_tournier
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 25 sept. 2004 à 22:08
0
Utile
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.
Commenter la réponse de cs_Delphiprog
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 25 sept. 2004 à 22:38
0
Utile
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
Commenter la réponse de arnaud_tournier
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 26 sept. 2004 à 15:34
0
Utile
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.
Commenter la réponse de cs_Delphiprog
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 26 sept. 2004 à 15:51
0
Utile
Oki, c est fait. J ai meme ajouté la récupération de la couleur du texte sélectionné....

Arnaud
Commenter la réponse de arnaud_tournier

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.

couleur de fond du texte sélectionné dans un richEdit - page 2