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 :

TextRect ne fait pas de retour à la ligne [Lazarus]


Sujet :

Lazarus Pascal

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut TextRect ne fait pas de retour à la ligne
    Bonjour à toutes et à tous,

    J'essaie d'écrire dans un TextRect avec un retour à la ligne, mais cela ne fonctionne pas bien que dans l'unité Graphics (Lazarus 2.0.6 voir à partir de la ligne 111) il soit noté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       Wordbreak : boolean;     // TextRect Only: If line of text is too long
                                 //    too fit between left and right boundaries
                                 //    try to break into multiple lines between
                                 //    words
                                 //    See also EndEllipsis.
     
        EndEllipsis: Boolean;    // TextRect Only: If line of text is too long
                                 //    to fit between left and right boundaries
                                 //    truncates the text and adds "..."
                                 //    If Wordbreak is set as well, Workbreak will
                                 //    dominate.
    Mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //        Zones[j].Canvas.TextStyle.Wordbreak:= True; // n'est pas accessible en écriture, mais ...
            B:= Zones[j].Canvas.TextStyle.Wordbreak; // ... est à True si on le teste
            Zones[j].Canvas.Font.Color:= clBlack;
            Zones[j].Canvas.Font.Size:= 16;
            Zones[j].Canvas.TextRect(Rect(0+100*k, 88, 100+100*k, 128), 0+100*k, 88, Detecteurs[i].Nom, Canvas.TextStyle);
    C'est moi qui fait mal les choses ou bien ce paramétrage ne fonctionne-t-il pas ?

    Cordialement.

    Pierre.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    WordBreak n'a aucun effet si SingleLine est vrai.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    WordBreak n'a aucun effet si SingleLine est vrai.
    Certes, mais comme les composantes de TextStyle ne sont accessibles qu'en lecture, comment fait-on ?

    Cordialement.

    Pierre.

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    utilise un TTextStyle. Exemple

    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
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    var
      TextStyle: TTextStyle;
    begin
        with PaintBox1 do begin
          TextStyle := Canvas.TextStyle;
          TextStyle.SingleLine := False;
          TextStyle.Wordbreak := True;
          TextStyle.Opaque := False;
          Canvas.TextStyle := TextStyle;
          Canvas.Font.Color:= clBlack;
          Canvas.Font.Size:= 16;
          Canvas.TextRect(PaintBox1.ClientRect, 45, 45, 'salut' + LineEnding + 'les Mickeys ');
      end;
    end;    
    //
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci beaucoup "jurassik pork " pour cette ruse de sioux . Je l'ai appliquée à mon cas et ça fonctionne très bien.

    Mais l'interligne obtenu est très grand.

    J'ai trouver le moyen d'utiliser "BGRABitmap" pour faire la même chose et l'interligne obtenu par ce moyen est plus réduit et me plait mieux. Je garde donc cette dernière solution.

    Pour autant, je garde cette idée d'utiliser le type par lui-même lorsque ses composantes ne sont pas disponibles directement dans un autre objet. Je n'ai pas d'exemple comme ça sous la main, mais j’imagine que ce doit être valable pour d'autres types que "TTextStyle".

    Cordialement.

    Pierre.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    C'est valable pour toutes les propriétés de type record.

    Une propriété a toujours un getter et un setter, ils sont implicites si on ne les définit pas soi-même.

    Un getter est une fonction et sur un record elle en retourne une copie. Modifier un champ de ce résultat reviendrait donc à modifier le champ de la copie, la classe l'implémentant n'en saurait rien. Pour éviter cela, le compilateur préfère s'arrêter là et retourner l'erreur "La partie gauche n'est pas affectable".

    Ce problème ne survient pas sur une propriété de type classe puisque l'instance d'une classe n'est qu'un pointeur. Champ original ou copie, le pointeur est toujours valide.

  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
    Bonjour,

    Citation Envoyé par ChPr Voir le message
    Mais l'interligne obtenu est très grand.
    C'est ça que tu appelles trop grand ? Entre la ligne "salut" et l'autre ?
    Nom : linebreak.png
Affichages : 104
Taille : 5,8 Ko


    Cette image est un simple copier/coller du code de JP, sans aucune retouche.

    Et comme la hauteur du saut de ligne dépend uniquement de la police utilisée,
    Citation Envoyé par ChPr Voir le message
    J'ai trouvé le moyen d'utiliser "BGRABitmap" pour faire la même chose et l'interligne obtenu par ce moyen est plus réduit et me plait mieux
    ta remarque dessus, franchement ça m'étonne.

    Fais donc voir une copie d'écran, qu'on juge sur pièce,

    Par exemple, là, je me suis contenté de rajouter une autre paintbox et une ligne dans le code de JP, Canvas.Font.Name := ''; avec Minion Pro à gauche et DejaVu Sans à droite :
    Nom : 2polices_différentes.png
Affichages : 113
Taille : 8,9 Ko
    Je vous laisse mesurer, , mais voilà une piste, un poil de traficotage du rendu plus zoom à 400 % -->
    Nom : zoom2.png
Affichages : 104
Taille : 1,6 Ko
    La zone colorée représente l'interligne entre le "s" et le "l" de gauche, enfin, à peu près car il faudrait prendre en compte la hauteur sous les caractères avec jambe descendante (g, j, p, q, y) et celle au-dessus pour les caractères ascendants (b, d, f, h, k, l, t). Mais pour cet exemple ce n'est pas utile.
    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 éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Salut Jipété,

    Tu as raison, l'interligne n'est pas si grand que ça ... mais il est fonction de la police utilisée. Dans mon cas j'utilisais la police pas défaut et ça me donnait un grand interligne.

    Par contre, le texte obtenu est justifié à gauche, je n'ai pas réussi à le centrer. Si j'utilise " TextStyle.Alignment:= taCenter;" alors il n'y a plus de wordwrap.

    Bon, de toutes façons, je suis parti maintenant avec TBGRABitmap qui me permet un texte centré et avec wordwrap. Cela me convient bien.

    Cordialement.

    Pierre.

  9. #9
    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 ChPr Voir le message
    Si j'utilise " TextStyle.Alignment:= taCenter;" alors il n'y a plus de wordwrap.
    Linux 1 -- Windows 0 ! (pour une fois...)

    Nom : center.png
Affichages : 98
Taille : 8,9 Ko
    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

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

Discussions similaires

  1. Ouverture d'un fichier texte avec IE (Pas de retour à la ligne)
    Par ran_hery dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 08/08/2013, 08h51
  2. Pas de retour à la ligne après balise de titre (h1 ou h2)
    Par Pierrick81 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2011, 12h55
  3. Réponses: 3
    Dernier message: 20/12/2010, 23h07
  4. Réponses: 6
    Dernier message: 15/01/2010, 02h13
  5. Pas de retour à la ligne dans PHP mode console
    Par Fluxy dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2008, 23h20

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