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

Lazarus Pascal Discussion :

BGRABitmap : obtenir la taille d'une string en pixels [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut BGRABitmap : obtenir la taille d'une string en pixels
    Bonjour à toutes et à tous,

    Je cherche à connaître la taille en pixels d'une chaîne afin de la cadrer dans une image, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TAffCarte.Infos_GPS(X, Y: Integer; Txt: String; bmp: TBGRABitmap; clText, clFond: TBGRAPixel);
    var
      h1, h2: Integer;
    begin
      bmp.FontHeight := 36;
      bmp.FontAntialias := true;
      bmp.FontStyle := [fsBold];
      h1:= bmp.Canvas.Font.GetTextWidth(Txt);
      h2:= bmp.Canvas.GetTextWidth(Txt);
     
      bmp.FillRoundRectAntialias(X-l/2, Y-15, X+l/2, Y+15, 10, 10, clFond, [rrDefault], True);
      bmp.TextOut(X-l/2, Y-10, Txt, clText);
    end;
    Si la taille du texte affiché est bien en rapport avec "FontHeight", chacune des deux lignes (h1 et h2) me renvoie systématiquement 188, qui est en rapport avec le texte choisi, mais qui n'est absolument pas en rapport avec la taille de police choisie.

    Que faut-il faire pour avoir un nombre de pixels en rapport avec la taille de la police ?

    Cordialement.

    Pierre

  2. #2
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Bon, j'ai trouvé "une" solution, mais bon sang que c'est bizarre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TAffCarte.Infos_GPS(X, Y: Integer; Txt: String; bmp: TBGRABitmap; clText, clFond: TBGRAPixel);
    var
      h, l: Integer;
    begin
      bmp.FontHeight := 20;
      bmp.Canvas.Font.Size:= 15;
      bmp.FontStyle := [fsBold];
      l:= bmp.Canvas.Font.GetTextWidth(Txt);
      h:= bmp.Canvas.Font.GetTextHeight(Text);
      bmp.FillRoundRectAntialias(X-10-l/2, Y-h/2, X+10+l/2, Y+h/2, 8, 8, clFond, [rrDefault], True);
      bmp.TextOut(X-l/2, Y-h/2, Txt, clText);
    end;
    - C'est le "bmp.FontHeight" qui donne la taille du texte mais ne ne joue absolument pas sur les valeurs l et h
    - C'est le " bmp.Canvas.Font.Size" qui donne les valeurs correctes de l et h, mais ne joue pas sur la taille de la police.

    NOTA : FontHeight = 4/3 de Size

    J'ai refais au moins 56 fois les manips pour être sûr de mon coup !

    Allez comprendre

    Si vous avez une meilleure solution, je suis preneur.

    Cordialement.

    Pierre

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Pas une petite idée de solution ?

    Parce que si sous Windows, ça se passe correctement, sous Linux, les longueurs obtenues ne sont pas bonnes, généralement trop petites.

    Cordialement.

    Pierre

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Pas une petite idée de solution ?

    Parce que si sous Windows, ça se passe correctement, sous Linux, les longueurs obtenues ne sont pas bonnes, généralement trop petites.

    Cordialement.

    Pierre
    Salut Pierre essaye de poster dans le forum Anglais, Circular est plus actif de ce côté et Lainz intervient très souvent. Ils seront mieux amenés à te répondre sur le sujet

    https://forum.lazarus.freepascal.org...oard,46.0.html

    Voici quelques sujets qui pourront peut-être t'aider
    https://forum.lazarus.freepascal.org...html#msg286182
    https://forum.lazarus.freepascal.org...html#msg313075
    https://forum.lazarus.freepascal.org...html#msg315743

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci BeanzMaster, grâce aux liens que tu m'as donnés, j'ai trouvé cette instruction "TextSize" qui fonctionne bien sous Windows, mais qui n'en fait qu'à sa tête sous Linux :

    Si j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      s: TSize;
    begin
      with bmp do
      begin
     ...
        s:= TextSize(Txt);
    j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fntrbase.pas(266,9) Error: Incompatible types: got "TSize" expected "LongWord"
    Bon, je change en LongWord :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      s:LongWord;
    begin
      with bmp do
      begin
     ...
        s:= TextSize(Txt);
    j'obtiens alors la même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fntrbase.pas(266,9) Error: Incompatible types: got "TSize" expected "LongWord"
    Comment se sort-on de ce piège infernal ?

    Cordialement.

    Pierre

  6. #6
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Hello ton erreur du type viens de l'ordre dans lequel sont declarées les unités. Je ne suis pas chez moi pour vérifier, regarde la fonction textsize dans bgrabitmap pour voir où est déclaré TSize. Il se trouve peut-être dans bgratypes et ce n'est donc pas celui qui est declaré dans Lazarus par défaut dans je ne sais plus quelle unité ("system", "graphics" ou LclTypes).

    A+
    Jerome
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

Discussions similaires

  1. Mesurer la taille d'une String en pixels
    Par PerpetualSnow dans le forum Silverlight
    Réponses: 7
    Dernier message: 18/02/2009, 16h04
  2. [JS] Taille d'une string en px
    Par Shivan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/07/2006, 14h16
  3. [JDK1.5] Obtenir Annotation à partir d'une String
    Par pitoubicou dans le forum Langage
    Réponses: 9
    Dernier message: 29/03/2006, 18h37
  4. [C#][TextBox] Comment obtenir la longeur d'une string
    Par l_ourson69 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/12/2005, 10h14
  5. [JDBC] Forcer la taille d'une string
    Par julio123 dans le forum JDBC
    Réponses: 4
    Dernier message: 10/06/2004, 09h43

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