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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

TRichEdit et taille du texte (La hauteur en pixel)


Sujet :

Langage Delphi

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut TRichEdit et taille du texte (La hauteur en pixel)
    Bonjour,
    après quelques recherches non concluantes, je me retourne vers vous.
    Je cherche à connaîtres la taille (Hauteur) en pixel du texte formaté d'un RichEdit.

    Merci d'avance.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Aucune idée...

    Allez, on va dire que c'est la question de la semaine. (J'aurai surement plus de chance)
    Comment avoir les dimensions (largeur/hauteur) en pixels d'un texte formaté (rtf) ?

    Bonne chance

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    Demain je t'envoie la solution, si si, elle est sur le PC de mon boulot

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par waskol
    Demain je t'envoie la solution, si si, elle est sur le PC de mon boulot
    Cool

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    [Mis à jour, Merci Portu !]

    Salut et comme promis, voici la fonction "magique" 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 : 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
    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ée 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 formatté dans ACanvas, dans les limites du Rectangle Rect passé en paramètre.
    False : on mesure le texte et on renvoi ses dimensions dans Rect

    Exemple :
    On mesure la taille complète du texte (index de 0 à -1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var ARect:TRect;
    PrintToCanvas(Form1.Canvas,0,-1,RichEdit1,ARect,false);
    J'ai construit cette fonction pour faire un composant qui permet d'afficher le texte formatté d'un champ d'une base de données dans un DBControlGrid , bien centré dans le Panel de ce dernier.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut


    tu es, sans conteste, le grand gagnant de la Question de la semaine

    Merci et a+

  7. #7
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    Citation Envoyé par portu


    tu es, sans conteste, le grand gagnant de la Question de la semaine

    Merci et a+
    de rien, de rien...

  8. #8
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Un bout de code qui peut s'avérer TRES pratique
    A mettre dans la FAQ Waskol ?

  9. #9
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    Citation Envoyé par TicTacToe
    Un bout de code qui peut s'avérer TRES pratique
    A mettre dans la FAQ Waskol ?
    Je m'en charge en ce moment

    Sinon, une précision :
    La fonction retourne l'index du dernier caractère qui tient dans le Rectangle Rect plus 1 (donc Index_du_dernier_caractère+1).

    voilà, voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [javascript][IE6] changement automatique taille du texte
    Par MatMeuh dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/12/2008, 13h05
  2. Taille du texte dans un ActiveX
    Par Audin'S dans le forum MFC
    Réponses: 1
    Dernier message: 27/05/2005, 14h43
  3. [Débutant][JLabel] Connaître la taille du texte
    Par Herisson_f dans le forum Composants
    Réponses: 8
    Dernier message: 04/05/2005, 11h53
  4. [JTable] ajuster la taille d'une colonne à la taille du texte
    Par GETah dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 24/02/2005, 12h53
  5. taille du texte dans un viewport
    Par pitounette dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/07/2002, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo