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

 Delphi Discussion :

[D7] Hauteur d'un texte multiligne


Sujet :

Delphi

  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 529
    Par défaut [D7] Hauteur d'un texte multiligne
    Bonjour,
    je n'ai pas les idées très claires ! Je voudrais calculer la hauteur du texte d'un Label multiligne de largeur donnée (ici 400). J'ai fait ceci, mais ça me renvoie 680 au lieu de 170 que j'ai estimé :

    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
      Label1.Font.Name := 'Segoe UI';
      Label1.Font.Size := 10;
      Label1.Font.Color := clBlue ;
      Label1.WordWrap := True;
      MessageText :=
      'Ceci est un message très long qui devrait passer à la ligne ' +
      'et ajuster la hauteur du panneau automatiquement.'+Chr(13)+
      ' Ceci est un message très long qui devrait passer à la ligne ' +
      'et ajuster la hauteur du panneau automatiquement.'+Chr(13)+
      ' Ceci est un message très long qui devrait passer à la ligne ' +
      'et ajuster la hauteur du panneau automatiquement.'+Chr(13)+
      ' Ceci est un message très long qui devrait passer à la ligne ' +
      'et ajuster la hauteur du panneau automatiquement.'+Chr(13)+
      ' Ceci est un message très long qui devrait passer à la ligne ' +
      'et ajuster la hauteur du panneau automatiquement.' ;
      Label1.caption := MessageText ;
     
      Canvas.Font.Assign(Label1.Font);
     
      TextW := Canvas.TextWidth(MessageText);
      if TextW > 400 then
        TextW := 400 ;
      Label1.Width := TextW;
     
      TextW := Canvas.TextWidth(MessageText);   // 400   Ok
      Label1.Width := TextW;                    // 400   Ok 
     
      Label1.Height := Canvas.TextHeight(MessageText) ; //  donne 680 normalement environ 170 ?
    Comment faire ?

    Merci

    A+
    Charly

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    Ton Canvas ne connait pas la largeur maximum et comment

    Il manque un
    Mais j'ai un gros doute, je ferais un DrawText DT_CALCRECT à la mano

    https://www.developpez.net/forums/d2.../#post12027428
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 529
    Par défaut
    Bonjour,

    Merci Shai, effectivement c'est avec DrawText. Voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function TForm1.LabelHeight(ALabel: TLabel) : Integer ;
    var
      R: TRect;
      Flags: Integer;
    begin
      R := Rect(0, 0, ALabel.Width, 0);      // largeur fixée du Label
      Flags := DT_WORDBREAK or DT_CALCRECT;  // texte multi-lignes
      ALabel.Canvas.Font.Assign(ALabel.Font);
      DrawText(ALabel.Canvas.Handle, PChar(ALabel.Caption), -1, R, Flags);
      Result := R.Bottom - R.Top;
    end;
    ça à l'air de marcher, dans mon cas ça me donne 170 résultat correct

    A+
    Charly

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

Discussions similaires

  1. problème zone de texte multilignes
    Par Le Rebel dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2006, 17h50
  2. [.config] Comment stocker une value : un texte multiligne ?
    Par Manralf dans le forum Framework .NET
    Réponses: 2
    Dernier message: 27/02/2006, 10h17
  3. Connaître la hauteur d'un texte multilignes
    Par Crisanar dans le forum Windows
    Réponses: 2
    Dernier message: 23/11/2004, 00h01

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