Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:lazarus:classes:tcanvas [02/04/2020 17:55]
thierry
prog:lazarus:classes:tcanvas [13/05/2020 15:07] (Version actuelle)
thierry [Differences TextOut / DrawText]
Ligne 1: Ligne 1:
 ====== TCanvas ====== ====== TCanvas ======
 ===== Dessiner du Texte ===== ===== Dessiner du Texte =====
 +On peut ecrire sur un Canvas avec la fonction [[prog:​lazarus:​functions:​drawtext]] ou TextOut.
 +
 ==== DrawText ==== ==== DrawText ====
-source : ||https://​docs.microsoft.com/​en-us/​windows/​win32/​api/​winuser/​nf-winuser-drawtext]] 
-=== Exemple === 
-<code delphi> 
-DrawText(Canvas.Handle,​PChar(vText),​ length(vText),​vTextBox,​DT_WORDBREAK or DT_INTERNAL or DT_CALCRECT);​ 
-</​code>​ 
-=== Formats === 
-== DT_BOTTOM == 
-Justifie le texte au bas du rectangle. Cette valeur est utilisée uniquement avec la valeur DT_SINGLINE. 
-== DT_CALCRECT == 
-Détermine la largeur et la hauteur du rectangle. S'il y a plusieurs lignes de texte, DrawText utilise la largeur du rectangle pointé par le paramètre lpRect et étend la base du rectangle pour délimiter la dernière ligne de texte. Si le mot le plus grand est plus large que le rectangle, la largeur est étendue. Si le texte est plus petit que la largeur du rectangle, la largeur est réduite. S'il n'y a qu'une seule ligne de texte, DrawText modifie le côté droit du rectangle de manière à ce qu'il délimite le dernier caractère de la ligne. Dans les deux cas, DrawText renvoie la hauteur du texte formaté mais ne dessine pas le texte. 
-== DT_CENTER == 
-Centrer le texte horizontalement dans le rectangle. 
-== DT_EDITCONTROL == 
-Duplique les caractéristiques d'​affichage du texte d'un contrôle d'​édition multiligne. Plus précisément,​ la largeur moyenne des caractères est calculée de la même manière que pour un contrôle d'​édition,​ et la fonction n'​affiche pas une dernière ligne partiellement visible. 
-== DT_END_ELLIPSIS == 
-Pour le texte affiché, si la fin d'une chaîne ne rentre pas dans le rectangle, elle est tronquée et des ellipses sont ajoutées. Si un mot qui n'est pas à la fin de la chaîne dépasse les limites du rectangle, il est tronqué sans ellipses. 
-La chaîne n'est pas modifiée à moins que le drapeau DT_MODIFYSTRING ne soit spécifié. 
  
-Comparer avec DT_PATH_ELLIPSIS et DT_WORD_ELLIPSIS.+ ​[[prog:​lazarus:​functions:​drawtext|Plus d'​infos sur DrawText]] 
 +==== TextOut ==== 
 +TextOut est accessible via ''​TCanvas.TextOut''​.
  
-== DT_EXPANDTABS == +Au final TextOut utilise ​l'API [[https://​docs.microsoft.com/​fr-fr/​windows/​win32/​api/​wingdi/​nf-wingdi-exttextouta|ExtTextOut]] ​de Windows
-Développe les caractères de tabulation. Le nombre de caractères par défaut par onglet est de huit. Les valeurs DT_WORD_ELLIPSIS,​ DT_PATH_ELLIPSIS et DT_END_ELLIPSIS ne peuvent pas être utilisées avec la valeur DT_EXPANDTABS. +
-== DT_EXTERNALLEADING == +
-Inclut la police de caractères externe en tête de ligne. Normalement, ​l'entête externe n'est pas incluse dans la hauteur d'une ligne de texte. +
-== DT_HIDEPREFIX == +
-Ignore le caractère préfixe (&​) ​de l'​esperluette dans le texte. La lettre qui suit ne sera pas soulignée, mais les autres caractères mnémoniques du préfixe sont toujours traités. +
-Exemple :+
  
-chaîne de saisie ​"​A&​bc&&​d"​+Sources: 
 +  * [[http://​docwiki.embarcadero.com/​Libraries/​Rio/​fr/​Vcl.Graphics.TCanvas.TextOut]]
  
-normal : "​Abc&​d +==== ClipRect ​====
- +
-DT_HIDEPREFIX : "​Abc&​d"​ +
- +
-Comparer avec DT_NOPREFIX et DT_PREFIXONLY. +
- +
-== DT_INTERNAL ​== +
-Utilise la police du système pour calculer les mesures du texte. +
-== DT_LEFT ​== +
-Aligne le texte à gauche. +
-== DT_MODIFYSTRING == +
-Modifie la chaîne de caractères spécifiée pour qu'​elle corresponde au texte affiché. Cette valeur n'a aucun effet à moins que DT_END_ELLIPSIS ou DT_PATH_ELLIPSIS ne soit spécifié. +
-== DT_NOCLIP == +
-Tirages au sort sans coupure. DrawText est un peu plus rapide lorsque DT_NOCLIP est utilisé. +
-== DT_NOFULLWIDTHCHARBREAK == +
-Empêche un saut de ligne au niveau d'une DBCS (chaîne de caractères à double largeur), de sorte que la règle de saut de ligne est équivalente aux chaînes SBCS. Par exemple, cela peut être utilisé dans les fenêtres coréennes, pour une meilleure lisibilité des étiquettes d'​icônes. Cette valeur n'a aucun effet à moins que DT_WORDBREAK ne soit spécifié. +
-== DT_NOPREFIX == +
-Désactive le traitement des caractères de préfixe. Normalement,​ DrawText interprète le caractère de préfixe mnémonique & comme une directive pour souligner le caractère qui suit, et les caractères de préfixe mnémonique && comme une directive pour imprimer un seul &. En spécifiant DT_NOPREFIX,​ ce traitement est désactivé. Par exemple, +
-Exemple : +
- +
-chaîne de saisie : "​A&​bc&&​d"​ +
- +
-normal : "​Abc&​d +
- +
-DT_NOPREFIX : "​A&​bc&&​d"​ +
- +
-Comparer avec DT_HIDEPREFIX et DT_PREFIXONLY. +
- +
-== DT_PATH_ELLIPSIS == +
-Pour le texte affiché, remplace les caractères au milieu de la chaîne par des ellipses afin que le résultat s'​inscrive dans le rectangle spécifié. Si la chaîne de caractères contient une barre oblique inversée (\), DT_PATH_ELLIPSIS préserve autant que possible le texte après la dernière barre oblique inversée. +
-La chaîne n'est pas modifiée à moins que l'​indicateur DT_MODIFYSTRING ne soit spécifié. +
- +
-Comparez avec DT_END_ELLIPSIS et DT_WORD_ELLIPSIS. +
- +
-== DT_PREFIXONLY == +
-Dessine seulement un trait de soulignement à la position du caractère suivant le caractère de préfixe de l'​esperluette (&). Ne dessine aucun autre caractère dans la chaîne. Par exemple, +
-Exemple : +
- +
-chaîne de saisie : "​A&​bc&&​d "n +
- +
-normal : "​Abc&​d +
- +
-DT_PREFIXONLY : " _ " +
- +
-Comparer avec DT_HIDEPREFIX et DT_NOPREFIX. +
- +
-== DT_RIGHT == +
-Aligne le texte sur la droite. +
-== DT_RTLREADING == +
-Mise en page dans l'​ordre de lecture de droite à gauche pour un texte bidirectionnel lorsque la police sélectionnée dans le hdc est une police hébraïque ou arabe. L'​ordre de lecture par défaut pour tout le texte est de gauche à droite. +
-== DT_SINGLINE == +
-Affiche le texte sur une seule ligne. Les retours de chariot et les sauts de ligne ne cassent pas la ligne. +
-== DT_TABSTOP == +
-Définit les arrêts de tabulation. Les bits 15-8 (octet d'​ordre supérieur du mot d'​ordre inférieur) du paramètre uFormat spécifient le nombre de caractères pour chaque tabulation. Le nombre de caractères par défaut pour chaque onglet est de huit. Les valeurs DT_CALCRECT,​ DT_EXTERNALLEADING,​ DT_INTERNAL,​ DT_NOCLIP, et DT_NOPREFIX ne peuvent pas être utilisées avec la valeur DT_TABSTOP. +
-== DT_TOP == +
-Justifie le texte en haut du rectangle. +
-== DT_VCENTER == +
-Le texte est centré verticalement. Cette valeur est utilisée uniquement avec la valeur DT_SINGLINE. +
-== DT_WORDBREAK == +
-Brise les mots. Les lignes sont automatiquement coupées entre les mots si un mot dépasse le bord du rectangle spécifié par le paramètre lpRect. Une séquence de retour de chariot à la ligne casse également la ligne. +
-Si cela n'est pas spécifié, la sortie se fait sur une ligne. +
- +
-== DT_WORD_ELLIPSIS == +
-Tronque tout mot qui ne rentre pas dans le rectangle et ajoute des ellipses. +
-Comparez avec DT_END_ELLIPSIS et DT_PATH_ELLIPSIS.+
  
 +==== Differences TextOut / DrawText ====
 +  * [[https://​stackoverflow.com/​questions/​31968771/​what-are-the-implications-of-using-canvas-textout]]
  
 +==== Dimension de textes ====
 +== TCanvas.TextExtent ==
  
 +On peut trouver la dimension d'un texte avec ''​TextExtent''​ qui retourne un [[prog:​lazarus:​types:​tsize|TSize]].
 +<code delphi>
 +  FCharSize:​=canvas.TextExtent('​8'​);​ //TSize
 +</​code>​