FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 934, dernière mise à jour : 23 octobre 2024 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.
- Comment créer un tableau au format RTF et l'insérer dans un TRichEdit ?
- Comment se positionner sur une ligne/colonne d'un TMemo/TRichEdit ?
- Comment écrire en couleur dans un TRichEdit ?
- Comment avoir les dimensions (largeur/hauteur) en pixels d'un texte formaté (RTF) ?
- Comment récupérer le n° de la 1ere ligne affichée dans un TMemo/TRichEdit ?
- Comment connaitre la position de la ScrollBar verticale dans un TMemo ou TStringGrid ?
- Comment désactiver le glisser/déposer
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; |
Code delphi : | Sélectionner tout |
RichEdit10.SelText:=tableaurtf(2,2,200);
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; |
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;
Code delphi : | Sélectionner tout |
RichEdit1.SelAttributes.Color:= clRed;
Code delphi : | Sélectionner tout |
RichEdit1.DefAttributes.Color:= TColor;
Ainsi si on passe clRed comme TColor tout le texte du TRichEdit deviendra rouge et tout ce que l'on va y écrire aussi.
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; |
- 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); |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 | var LineIndex:Integer; begin LineIndex:=RichEdit1.perform(EM_GETFIRSTVISIBLELINE,0,0); end; |
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.
Code Delphi : | Sélectionner tout |
1 2 3 4 5 6 7 | uses Winapi.ActiveX; { Form Create } procedure TForm1.FormCreate(Sender: TObject); begin RevokeDragDrop(RichEdit1.Handle); end; |
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 çaLes 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.