Bonjour,
Je voudrais surligner ou mettre 1 couleur sur 1 ligne particuliere d'1
TRichEdit.
Comment faire?
D'avance merci.
PS: S'il y'a 1 autre composant qui le fait mieux, il est le bienvenu!!
Bonjour,
Je voudrais surligner ou mettre 1 couleur sur 1 ligne particuliere d'1
TRichEdit.
Comment faire?
D'avance merci.
PS: S'il y'a 1 autre composant qui le fait mieux, il est le bienvenu!!
Dans une fiche, j'ai mis deux boutons, un TRichedit et quelques ligne de code (pas de moi) que j'ai trouvé ici :
http://www.phidels.com/php/index.php...0a26289b14e51d
Bref, ça marche nickel-chrome
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
57
58
59
60
61
62
63
64
65
66
67
68 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls,richedit; type TForm1 = class(TForm) RichEdit1: TRichEdit; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure SupprSurligne(const RE: TRichEdit); var Format : CHARFORMAT2; begin FillChar(Format, SizeOf(CHARFORMAT2), 0); Format.cbSize := SizeOf(CHARFORMAT2); SendMessage(RE.Handle, EM_GETCHARFORMAT, WPARAM(True), LPARAM(@Format)); Format.dwMask := CFM_BACKCOLOR; Format.dwEffects := CFE_AUTOBACKCOLOR; SendMessage(RE.Handle, EM_SETCHARFORMAT, SCF_SELECTION, LPARAM(@Format)) end; procedure Surligne(const RE: TRichEdit; const Color: TColor); var Format : CHARFORMAT2; begin FillChar(Format, SizeOf(CHARFORMAT2), 0); Format.cbSize := SizeOf(CHARFORMAT2); SendMessage(RE.Handle, EM_GETCHARFORMAT, WPARAM(True), LPARAM(@Format)); Format.dwMask := CFM_BACKCOLOR; Format.crBackColor := ColorToRGB(Color); Format.dwEffects := 0; // CFE_AUTOBACKCOLOR SendMessage(RE.Handle, EM_SETCHARFORMAT, SCF_SELECTION, LPARAM(@Format)) end; procedure TForm1.Button1Click(Sender: TObject); begin Surligne(RichEdit1, clRed); end; procedure TForm1.Button2Click(Sender: TObject); begin SupprSurligne(RichEdit1); end; end.![]()
Oui J'ai vu le meme code mais ca ne marche pas !!!!
En plus je ne vois pas là ou on lui indique le numéro de ligne.
Mais si ça marche, j'ai essayé !!!Envoyé par mohamed
Essaies l'exemple, avec un texte dans ton RichEdit. Sélectionne du texte à la souris, puis cliques sue le Button1...
Là tu verras que ça marche, d'accord ?
Bien, en fait, comme tous les formattage de texte, celà ne fonctionne qu'après avoir sélectionné un bout de texte.
En programmation la selection se fait avec les propriétés SelStart et SelLength qui permettent de sélectionner du texte en indiquant l'index du premier caractère et du dernier caractère de la sélection.
Reste à trouver l'index du premier caractère d'une ligne et l'index du dernier caractère...
A partir de là, dans la FAQ, tu trouves ça :
Comment se positionner sur une ligne/Colonne d'un TMEMO/TRichEdit ?
Donc en adaptant un peu le code, tu rajoute ça dans le code que je t'ai déjà donné :
Sinon, il ne faut pas oublier l'unité RichEdit dans les uses
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure SurligneUneLigne(const RE: TRichEdit; const Color: TColor;NumeroDeLigne:integer); begin RE.SelStart:=RE.Perform(EM_LINEINDEX, NumeroDeLigne, 0); RE.SelLength:=RE.Perform(EM_LINELENGTH, RE.SelStart, 0); Surligne(RE,Color); end; procedure TForm1.Button1Click(Sender: TObject); begin SurligneUneLigne(RichEdit1, clMoneyGreen,2); end;![]()
Partager