IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 124, nombre de questions : 929, dernière mise à jour : 31 décembre 2023  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

SommaireInterface utilisateurComposantsLe composant TRichEdit (6)
précédent sommaire suivant
 

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
function tableaurtf(nbcol,nbligne,largeur:integer):string; 
var i,j : integer; 
begin 
 result:='{\rtf1\trowd'; 
 for i:=1 to nbcol do result:=result+format('\cellx%d',[i*(2000+largeur)]); 
 for j:=1 to nbligne do 
 begin 
  result:=result+'\intbl'; 
  for i:=1 to nbcol do result:=result+'\cell'; 
  result:=result+'\row'; 
 end; 
 result:=result+'}'; 
end;
Et voici un exemple de code pour insérer dans mon RichEdit un tableau de largeur 200 ayant 2 lignes et 2 colonnes:
Code delphi : Sélectionner tout
RichEdit10.SelText:=tableaurtf(2,2,200);

Mis à jour le 21 janvier 2014 hpalpha

Le code suivant permet de se positionner sur une ligne/colonne précise d'un TMemo/TRichEdit.

Code delphi : Sélectionner tout
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
procedure TForm1.Button1Click(Sender: TObject); 
var 
  itemp: Integer; 
begin 
  with RichEdit1 do 
  begin 
    // Aller à la dernière ligne 
    SelStart := Length(Text); 
    Perform(EM_SCROLLCARET, 0, 0); 
  
    // ou encore: Perform(WM_VSCROLL, SB_BOTTOM,0); 
  
    // Aller à la Première ligne 
    SelStart := Perform(EM_LINEINDEX, 0, 0); 
    Perform(EM_SCROLLCARET, 0, 0); 
  
    // Aller à la ligne 5, colonne 3 
    SelStart := Perform(EM_LINEINDEX, 5, 0) + 3; 
    Perform(EM_SCROLLCARET, 0, 0); 
  
    // Scroller d'une ligne vers le bas 
    with RichEdit1 do 
    begin 
      itemp := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0); 
      SelStart := Perform(EM_LINEINDEX, itemp + 1, 0); 
      Perform(EM_SCROLLCARET, 0, 0); 
    end; 
  
  end; 
end;

Mis à jour le 21 janvier 2014 octal

Le TRichEdit supporte contrairement au TMemo des opérations de mise en forme et de coloration. Nous pouvons attribuer une couleur soit à tout le texte du TRichEdit soit à une partie spécifique du texte comme nous le montrent les bouts de code suivant :

Code delphi : Sélectionner tout
RichEdit1.SelAttributes.Color:= TColor;
permet de changer la couleur utilisée pour écrire dans le TRichEdit, ainsi si on fait :
Code delphi : Sélectionner tout
RichEdit1.SelAttributes.Color:= clRed;
Le texte sera alors écrit en rouge à partir de cet instant.
Code delphi : Sélectionner tout
RichEdit1.DefAttributes.Color:= TColor;
permet de changer la couleur du texte du TRichEdit tout entier.
Ainsi si on passe clRed comme TColor tout le texte du TRichEdit deviendra rouge et tout ce que l'on va y écrire aussi.

Mis à jour le 21 janvier 2014 qazer

Voici une fonction qui permet :

  • soit d'afficher le contenu d'un TRichEdit dans un TCanvas (mettre RenderIt à True, dans les limites d'un Rectangle donné Rect)
  • soit de mesurer la taille du texte ( RenderIt à False, dimensions du Rectangle donné renvoyées dans Rect)

Code delphi : Sélectionner tout
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
uses Windows,Forms,Graphics, RichEdit, ComCtrls; 
... 
  
function PrintToCanvas(ACanvas : TCanvas; FromChar, ToChar : integer; 
                      ARichEdit : TRichEdit; var ARect : TRect;RenderIt:boolean) : Longint; 
var  Range    : TFormatRange; 
begin 
    //Précaution 
    SendMessage(ARichedit.Handle, EM_FORMATRANGE, 0, 0); 
  
    if not RenderIt then 
    begin 
      SetRect(ARect,0,0,ARichEdit.Width,ARichEdit.Height); 
    end; 
  
    FillChar(Range, SizeOf(TFormatRange), 0); 
    Range.hdc        := ACanvas.handle; 
    Range.hdcTarget  := ACanvas.Handle; 
    Range.rc.left    := ARect.Left * 1440 div Screen.PixelsPerInch; 
    Range.rc.top     := Arect.Top * 1440 div Screen.PixelsPerInch; 
    Range.rc.right   := ARect.Right * 1440 div Screen.PixelsPerInch; 
    Range.rc.Bottom  := ARect.Bottom * 1440 div Screen.PixelsPerInch; 
    Range.chrg.cpMax := ToChar; 
    Range.chrg.cpMin := FromChar; 
    if RenderIt 
    then Result := SendMessage(ARichedit.Handle, EM_FORMATRANGE, 1, Longint(@Range)) 
    else begin 
           Range.chrg.cpMax := ARichedit.GetTextLen; 
           Result := SendMessage(ARichedit.Handle, EM_FORMATRANGE, 0, Longint(@Range)); 
           ARect:=Range.rc; 
           ARect.Bottom  := Range.rc.Bottom * Screen.PixelsPerInch div 1440; 
         end; 
   SendMessage(ARichEdit.handle, EM_FORMATRANGE, 0,0); 
end;
Utilisation :
  • ACanvas (TCanvas) :
    Un Canvas qui sert à "dessiner" le texte formaté (celui d'un TBitmap que l'on a créé pour l'occasion par exemple)
  • FromChar, ToChar (integer) :
    Index du premier et dernier caractère du texte à prendre en compte pour mesurer le texte (mettre Tochar à -1 pour
    prendre le dernier caractère du texte)
  • ARichEdit (TRichEdit) :
    Le TRichEdit qui contient le texte formaté
  • RenderIt (boolean) et var ARect (TRect) :
    • True : on dessine vraiment le texte formaté dans ACanvas, dans les limites du Rectangle Rect passé en paramètre.
    • False : on mesure le texte et on renvoie ses dimensions dans Rect


La fonction retourne l'index du dernier caractère qui tient dans le Rectangle Rect plus 1 (donc Index_du_dernier_caractère+1)

Exemple :
On mesure la taille complète du texte (index de 0 à -1)
Code delphi : Sélectionner tout
1
2
var ARect:TRect; 
PrintToCanvas(Form1.Canvas,0,-1,RichEdit1,ARect,false);

Mis à jour le 21 janvier 2014 LadyWasky

Code delphi : Sélectionner tout
1
2
3
4
5
6
  
var 
 LineIndex:Integer; 
begin 
 LineIndex:=RichEdit1.perform(EM_GETFIRSTVISIBLELINE,0,0); 
end;

Mis à jour le 11 août 2018 patrice@

Dans la déclaration des procédures :

Code delphi : Sélectionner tout
1
2
  
    Procedure Memo1ScrollCatcher(var message: TMessage);

Dans implementation :

Code delphi : Sélectionner tout
1
2
3
4
5
 
type 
  TMyControl = class(TControl); 
 
  LineIndex1 : Integer // est à déclarer en portée globale pour pouvoir être utilisée dans votre code. Donc, avant ou après implementation.

Dans l'événement FormCreate de la fiche, ajoutez ceci :

Code delphi : Sélectionner tout
1
2
3
4
5
  
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  RichEdit1.WindowProc := Memo1ScrollCatcher; 
end;

Puis la procédure suivante :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
  
procedure TForm1.Memo1ScrollCatcher(var message: TMessage); 
begin 
     TMyControl(RichEdit1).WndProc(message); 
     if ((message.Msg = WM_VSCROLL) or (message.Msg = WM_MOUSEWHEEL)) 
     then begin 
         LineIndex1 := GetScrollPos(RichEdit1.Handle, SB_VERT); 
  
         // mettez un label (Label1) sur votre fiche, pour voir 
         Label1.Caption:=IntToStr(LineIndex1 ); // affiche la position de la ScrollBar verticale 
     end; 
end;


Voilà, c'est tout. Lors d'un scroll molette ou clic sur la ScrollBar, LineIndex=position de la ScrollBar verticale

A décliner autant de fois qu'il y a de mémos sur lesquels travailler.

Mis à jour le 11 août 2018 patrice@

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.