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 :

Tailles de caractères - Canvas


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut Tailles de caractères - Canvas
    Bonjour,

    après pas mal de recherches je me permets de poser ces questions concernant la taille des caractères dans un Canvas.
    Je ne parviens pas à maîtriser la taille de ces caractères.
    Exemple: Je choisis une Font de 16 dans un Canvas de 16 pixels de côté.
    J'écris un caractère dans le Canvas et je demande la hauteur du texte (TextHeight) et la valeur vaut 21.
    Je place le caractère en 0,0 dans le Canvas et il y a une ligne blanche au-dessus.

    En fait j'essaie de maîtriser le taille des caractères et de leurs implantations dans un Canvas.

    Un moment de honte est vite passé alors je me permets de poser cette question.

    Merci à vous.

    BB

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep !
    Citation Envoyé par BBouille Voir le message
    Exemple: Je choisis une Font de 16 dans un Canvas de 16 pixels de côté.
    Pas sûr que les points de la font soient des pixels (au sens où tu l'entends).
    Tu devrais faire des essais avec une font de 16 dans un canvas de 40, puis jouer avec d'autres valeurs, pour voir.

    Citation Envoyé par BBouille Voir le message
    Je place le caractère en 0,0 dans le Canvas et il y a une ligne blanche au-dessus.
    Oui, il y a toujours du blanc au dessus, au dessous, à gauche et à droite d'un signe typographique, quel qu'il soit.
    Sinon le bas des descendantes (p, q) pourrait se confondre avec le haut des ascendantes (b, d, h, l, t...) et ça ne serait pas joli ; idem pour l'espace inter-caractères.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Utilisez la propriété Height pour spécifier la hauteur de la fonte en pixels. Si la valeur est négative, le talus interne, apparaissant au-dessus de chaque ligne de texte n'est pas mesuré. Si la valeur est positive, Height représente la hauteur des caractères plus le talus interne.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Merci à vous deux mais je n'ai toujours pas trouvé la logique entre la hauteur et la taille des caractères. J'ai beau faire varier ces paramètres je n'y parviens pas.
    Si vous avez un tuyau pour un tutoriel sur ce domaine ça m'arrangerait bien.
    Ou je pige rien ou pourquoi faire simple quand on peut faire compliqué.

    Merci.

    BB

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    la fonction de Windows GetTextMetrics peu t'éclairer

    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      Bitmap: TBitmap;
      Metric: TTextMetric;
    begin
      Bitmap := TBitmap.Create;
      Bitmap.Height := 16;
      Bitmap.Width := 500;
     
      with Bitmap.Canvas do
      begin
        Font.Height := -16;
        GetTextMetrics(Handle, Metric);
        TextOut(0, 0, 'Apé' + IntToStr(Metric.tmAscent) + ' - ' + IntToStr(Metric.tmInternalLeading) + ' + ' + IntToStr(Metric.tmDescent));
      end;
     
      Image1.Picture.Assign(Bitmap);
      Bitmap.Free;
    end;
    ce code te donne un texte "Apé 16 - 4 + 4", la jambe du "p" est tronquée.

    Le 'A' fait 16 - 4 = 12 pixels, les 4 pixels sont un espace au dessus du A
    la jambe du p devrait fait 4 pixel de plus (16 + 4 = 20 pixels)

    par contre je ne pense pas qu'il existe une fonction pour obtenir une font dont tmAscent = 16, si c'est bien ce que tu veux...tu peux par contre remonter le texte en haut de l'image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextOut(0, -Metric.tmInternalLeading, 'Apé' + IntToStr(Metric.tmAscent) + ' - ' + IntToStr(Metric.tmInternalLeading) + ' + ' + IntToStr(Metric.tmDescent));
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Merci Paul,

    c'est exactement ce qu'il me fallait. Ici au moins on maîtrise les caractéristiques des caractères.
    Pour ceux à qui ça pourrait servir il faut créer un Bitmap dont la hauteur est égale à la hauteur de la font (tmAscent qui comprend le caractère au_dessus de la ligne de base y compris l'accent + tmDescent (la distance sous la ligne de base, jambe du p par exemple.

    Merci encore.

    BB

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BBouille Voir le message
    (...) Merci encore.

    BB
    N'oublie pas de cliquer sur , si tu repasses par ici...

    Quant à moi, je suis bien malheureux, Lazarus implémente GetTextMetrics différemment
    Je n'ai pas InternalLeading, dur dur !
    Nom : glyph-size.png
Affichages : 515
Taille : 20,3 Ko

    Et je profite de cette note pour corriger une bêtise de ma part (j'étais resté aux caractères en plomb) : il n'y a pas de ligne sous le dessin du glyphe, l'espacement entre les lignes se fait avec l'ExternalLeading.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Merci Jipété,

    j'attendais un éventuel commentaire; tu as bien conclu le sujet avec cette représentation.

    BB.

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

Discussions similaires

  1. Adapter un texte à la taille d'un Canvas
    Par alex6891 dans le forum Java ME
    Réponses: 8
    Dernier message: 16/03/2007, 09h21
  2. [phpMyAdmin] réduire la taille des caractères dans phpMyAdmin
    Par loopback dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 26/02/2007, 13h04
  3. [FPDF] Problème de taille de caractères
    Par Didine_8 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/12/2006, 11h33
  4. Taille des caractères
    Par nellynew dans le forum IHM
    Réponses: 5
    Dernier message: 18/05/2006, 14h21
  5. [VBA]taille de caractères
    Par l@rry dans le forum Access
    Réponses: 2
    Dernier message: 12/01/2005, 10h57

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