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

C++Builder Discussion :

Affichage de chaine étrange


Sujet :

C++Builder

  1. #1
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut Affichage de chaine étrange
    Bonjour à tous

    Dans une application FMX, je dessine du texte sur un Canvas avec la méthode FillText et j'ai des résultats assez étranges.
    Quand ma chaine de caractère commence par un chiffre l'affichage est bouleversé exemple:
    ma chaine originale "-10 pas" s'affiche à l'écran de cette façon pas 10-
    Par contre si je met une lettre en début de chaine l'affichage est correct
    ma chaine originale "A -10 pas" s'affiche à l'écran de cette façon A -10 pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String chaine="-10 pas";
    float HYtxt0 = Canvas->TextHeight(chaine);
    float LXtxt1 = Canvas->TextWidth(chaine);
    Canvas->BeginScene();
    Canvas->Fill->Color = claBlack;
    Canvas->FillText(TRectF(100, 150, 100 + LXtxt1, 150 + HYtxt0), stYmin,false, 1, TFillTextFlags() << TFillTextFlag::RightToLeft,TTextAlign::Leading);
    Canvas->EndScene();
    Une idée???

    Oublié j'utilise RAD studio v10.3.3

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 759
    Par défaut
    Moi je dois être stupide mais, c'est quoi ta variable stYmin ?

    D'après la documentation FMX.Graphics.TCanvas.FillText, le deuxième paramètre c'est ta chaîne de caractères const System::UnicodeString AText, donc ta variable chaine

  3. #3
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par foetus Voir le message
    Moi je dois être stupide mais, c'est quoi ta variable stYmin ?
    Oups erreur de copié collé il faut lire chaine au lieu de stYmin

    Le bon code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    String chaine="-10 pas";
    float HYtxt0 = Canvas->TextHeight(chaine);
    float LXtxt1 = Canvas->TextWidth(chaine);
    Canvas->BeginScene();
    Canvas->Fill->Color = claBlack;
    Canvas->FillText(TRectF(100, 150, 100 + LXtxt1, 150 + HYtxt0), chaine,false, 1, TFillTextFlags() << TFillTextFlag::RightToLeft,TTextAlign::Leading);
    Canvas->EndScene();

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 759
    Par défaut
    Commence par regarder si les tailles fournies/ calculées pour les 2 chaînes de caractères sont à peu près proportionnellement équivalentes (avec 1 règle de 3, si avec 7 - 10 caractères j'ai X, alors pour 10 - 7 caractères j'attends 10X/7 - 7X/10)

    Limite mets 1 taille très grande (pareil pour ton canvas) pour être sûr que ta chaîne soit affichée en entier et vérifier qu'elle est effectivement affichée complète ... ou pas

  5. #5
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Ce n'est pas un problème de taille j'ai déjà fait ce test. D'autant que tous les caractères sont bien affichés quelque soit le contenu de la chaine de caractère. Ils le sont juste dans un ordre un peu différent en fonction du contenu de la chaine

    Je me pose plus de question sur ce paramètre TFillTextFlags() << TFillTextFlag::RightToLeft qui en plus n'as qu'une valeur possible RightToLeft et qui semble indiquer un sens de la droite vers la gauche ce qui est opposé au sens d'écriture "traditionel"

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    J'ai trouvé la solution sur un autre forum. Le problème viens de << TFillTextFlag::RightToLeft . Il faut le supprimer sinon ça écrit à l'envers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Canvas->FillText(TRectF(100, 150, 100 + LXtxt1, 150 + HYtxt0), stYmin,false, 1, TFillTextFlags(),TTextAlign::Leading);
    La documentation en ligne à ce sujet est très mal écrite

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 759
    Par défaut
    Citation Envoyé par Gouyon Voir le message
    La documentation en ligne à ce sujet est très mal écrite
    J'ai travaillé sous Embarcadero xe6/ C++ et j'ai de très vagues souvenirs

    Mais il me semble que c'est 1 truc spécifique à Delphi pour manipuler les énumérations (de type drapeau binaire) ... et que je n'aimais pas du tout
    Je n'ai pas d'environnement pour tester, mais je dirais que :
    • TFillTextFlags() doit retourner la "configuration" par défaut. En théorie, on s'attend à tous les drapeaux désactivés. (donc 0)
    • << doit ajouter 1 drapeau. C'est l'équivalent du ou binaire |
    • >> doit retirer 1 drapeau. C'est l'équivalent de et non(drapeau) binaire and ~flag


    Donc, c'est + à toi de connaître ton environnement/ tes outils et cela n'a rien à voir avec la bibliothèque FMX ni avec cette méthode en particulier

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 277
    Par défaut
    Bon à savoir en tout cas, merci Gouyon et Foetus.

    Yves

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

Discussions similaires

  1. format affichage des chaines de caractères
    Par gorgonite dans le forum Langage
    Réponses: 3
    Dernier message: 10/05/2007, 22h14
  2. Réponses: 4
    Dernier message: 30/09/2006, 12h27
  3. affichage du classeur étrange
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/08/2006, 09h02
  4. Problème saisie et affichage de chaine
    Par sam.fet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/08/2006, 17h18
  5. [problème] affichage de chaines
    Par 123quatre dans le forum C
    Réponses: 12
    Dernier message: 07/01/2006, 20h47

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