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 vertical dans un TLabel [Débutant(e)]


Sujet :

C++Builder

  1. #1
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut Affichage vertical dans un TLabel
    Bonjour,

    je voudrai afficher verticalement mon texte dans un TLabel.
    J'ai utilisé cet exemple : http://chgi.developpez.com/tips1/#tips7
    Pour afficher du texte dans ma fênetre pas de souci

    J'ai adapté ce code à un TLabel, mais impossible de comprendre ce qui ne va pas
    Code C++ : 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
     
       TCanvas *canvasLbl;
       LOGFONT lgfont;
       AnsiString text = "C++ Builder";
     
       canvasLbl = MonLabel->Canvas; //canvas du Label
     
       canvasLbl->Font->Size = 20;
       canvasLbl->Font->Name = "Arial";
     
       GetObject(canvasLbl->Font->Handle, sizeof(LOGFONT), &lgfont);
       lgfont.lfEscapement = 900;   //Angle *10
       lgfont.lfOrientation = 900;  //Angle *10
       lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
     
       canvasLbl->Font->Handle = CreateFontIndirect(&lgfont);
       SetGraphicsMode(canvasLbl->Handle, GM_ADVANCED);
       canvasLbl->Brush->Style = bsClear;   //transparent
     
       canvasLbl->TextOut(50,210, text);

    Pour être sûr que l'erreur ne venait pas des coordonnées (x, y), j'ai fait un label de la taille de la fenêtre . Mais rien ne s'affiche. Si vous pouviez m'éclairer.

    Petite précision : la propriété AutoSize du TLabel est à false.

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Ton code fonctionne! Je l'ai mis dans le OnPaint de la Form. Par contre, une question que je pose à mon tour!
    Pourquoi on ne peut pas mettre le code dans le OnCreate de la form et appelé la méthode Repaint() ou Refresh ou encore Invalidate() (d'ailleurs, je n'ai pas vraiment su la différence entre ces 3 méthodes)

    Sinon Blondelle avait fait l'affichage vertical du TLabel :

    C'est sur ce post

    Voilà, en espérant que ça t'aide

  3. #3
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    Salut,

    Ton code fonctionne! Je l'ai mis dans le OnPaint de la Form.
    c'est ce que j'ai fait et ça ne marche pas Lundi j'essaierai de le placer dans le OnPaint du TLabel (j'ai complètement oublié d'essayer ce cas de figure ).

    Citation Envoyé par ero-sennin Voir le message
    Par contre, une question que je pose à mon tour!
    Pourquoi on ne peut pas mettre le code dans le OnCreate de la form et appelé la méthode Repaint() ou Refresh ou encore Invalidate() (d'ailleurs, je n'ai pas vraiment su la différence entre ces 3 méthodes)
    Je n'en ai pas la moindre idée, ces événements doivent sans doute de dérouler dans un ordre très précis. La doc C++Builder doit sans doute mentionner ces différences.

    Citation Envoyé par ero-sennin Voir le message
    Sinon Blondelle avait fait l'affichage vertical du TLabel :
    C'est sur ce post
    Voilà, en espérant que ça t'aide
    Insérer de \n entre chaque lettre, ce n'est pas de que je cherche

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut


    Alors, là, je n'y comprends plus rien! J'avais réussi à faire en sorte que le texte s'affiche correctement dans le Label et ce matin, je fais pour retester, ça ne fonctionne pas! Plus moyen d'écrire quoi que ce soit dans le canvas du Label

    Je poursuis encore sur cette histoire ... étrange
    Désolé pour la "fausse joie".
    En faite, si tu fais le test chez toi en mettant le Label en visible=false et en laissant ton code dans le OnPaint, tu remarqueras que c'est sur le Canvas de ta Form qu'on va travailler ...

    Cordialement

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Citation Envoyé par ero-sennin Voir le message


    Alors, là, je n'y comprends plus rien! J'avais réussi à faire en sorte que le texte s'affiche correctement dans le Label et ce matin, je fais pour retester, ça ne fonctionne pas! Plus moyen d'écrire quoi que ce soit dans le canvas du Label
    tu as dû travailler dans le canvas de la forme sans le savoir.

    Demain, lundi, je ferai le test en mettant le code de OnPaint du TLabel.
    J'ai déjà appliqué ce code dans les cellules d'un TStringGrid sans aucun problème en utilisant le canvas du TStringGrid et en plaçant le code sur l'événement OnDrawCells.

    Je suis sûr qu'il ne manque pas grand chose, pour ce code fontionne

    Merci pour tes éclaircissements

  6. #6
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    Bonjour
    En ajoutant la proprièté "Align" a "alClient" ca marche avec le TLabel,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       Label1->Align = alClient;
       Application->ProcessMessage();
       Label1->Canvas->Font->Size = 20;
       Label1->Canvas->Font->Name = "Arial";
       LOGFONT lgfont;
       GetObject(Label1->Canvas->Font->Handle, sizeof(LOGFONT), &lgfont);
       lgfont.lfEscapement = 450;   //Angle *10
       lgfont.lfOrientation = 450;  //Angle *10
       lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
       Label1->Canvas->Font->Handle = CreateFontIndirect(&lgfont);
       SetGraphicsMode(Label1->Canvas->Handle, GM_ADVANCED);
       Label1->Canvas->Brush->Style = bsClear;   //transparent
       AnsiString text = "C++ Builder";
       Label1->Canvas->TextOut(50,210, text);
    A+

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    à quoi sert le :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application->ProcessMessage();

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Auteur:
    La fonction a une petite erreur il faut ecrire ceci
    Application->ProcessMessages();

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par winow Voir le message
    Bonjour
    En ajoutant la proprièté "Align" a "alClient" ca marche avec le TLabel,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       Label1->Align = alClient;
       Application->ProcessMessage();
       Label1->Canvas->Font->Size = 20;
       Label1->Canvas->Font->Name = "Arial";
       LOGFONT lgfont;
       GetObject(Label1->Canvas->Font->Handle, sizeof(LOGFONT), &lgfont);
       lgfont.lfEscapement = 450;   //Angle *10
       lgfont.lfOrientation = 450;  //Angle *10
       lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
       Label1->Canvas->Font->Handle = CreateFontIndirect(&lgfont);
       SetGraphicsMode(Label1->Canvas->Handle, GM_ADVANCED);
       Label1->Canvas->Brush->Style = bsClear;   //transparent
       AnsiString text = "C++ Builder";
       Label1->Canvas->TextOut(50,210, text);
    A+
    Heu, tu es sur de celà ?
    J'ai mis ton code dans le OnPaint de la Form et j'ai rien

  10. #10
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    Salut
    En fait, j'ai mis ce code dans un TButton,
    A+

  11. #11
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    Je vient de tester dans le onpaint de form1,
    Ca marche en rajoutant "Label1->Transparent = true;"

    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
       Label1->Align = alClient;
       Label1->Transparent = true;
       Application->ProcessMessages();//sert que pour ne pas cliquer 2 fois sur un 
                                 //TButton pour afficher le message dans le TLabel
       Label1->Canvas->Font->Size = 20;
       Label1->Canvas->Font->Name = "Arial";
       LOGFONT lgfont;
       GetObject(Label1->Canvas->Font->Handle, sizeof(LOGFONT), &lgfont);
       lgfont.lfEscapement = 450;   //Angle *10
       lgfont.lfOrientation = 450;  //Angle *10
       lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
       Label1->Canvas->Font->Handle = CreateFontIndirect(&lgfont);
       SetGraphicsMode(Label1->Canvas->Handle, GM_ADVANCED);
       Label1->Canvas->Brush->Style = bsClear;   //transparent
       AnsiString text = "C++ Builder";
       Label1->Canvas->TextOut(50,210, text);
    A+

  12. #12
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    c'est bon ça marche

    Code c++ : 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
    21
    22
     
    void __fastcall TfForm::FormPaint(TObject *Sender)
    {
       TCanvas *canvasLbl;
       LOGFONT lgfont;
       AnsiString text = "C++ Builder";
     
       canvasLbl = Label1->Canvas;
     
       canvasLbl->Font->Size = 20;
       canvasLbl->Font->Name = "Arial";
     
       GetObject(canvasLbl->Font->Handle, sizeof(LOGFONT), &lgfont);
       lgfont.lfEscapement = 900;   //Angle *10
       lgfont.lfOrientation = 900;  //Angle *10
       lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
       canvasLbl->Font->Handle = CreateFontIndirect(&lgfont);
       SetGraphicsMode(canvasLbl->Handle, GM_ADVANCED);
       canvasLbl->Brush->Style = bsClear;   //transparent
     
       canvasLbl->TextOut(50,200, text);
    }

    Propriétés du Label :
    • Align = alNone (cette valeur n'infuence pas l'affichage)
    • Anchors = akLeft, akTop (idem, les valeurs prises n'ont pas d'influence)
    • AutoSize = false (sinon c'est rapé )
    • Height = 455 ; Width = 161 : Comme AutoSize est à false, il faut définir une hauteur et une largeur au label. En fait, il faut prévoir la zone d'affichage.
    • Transparent = true


    Une remarque : si vous faites AutoSize =true puis AutoSize = false, les valeurs de width et height auront changé et dans ce cas vous risquez de ne plus voir le texte (et ainsi ne pas comprendre pourquoi au début ça marchait et plus ensuite ).
    Donc vérifiez bien les valeurs de Heigth et Width de telle sorte que les coordonées (x,y) du texte soient dans la zone d'affichage.


    Merci pour votre aide

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

Discussions similaires

  1. [VxiR2] affichage valeurs dans bar charts "vertical stacked"
    Par boutte dans le forum Webi
    Réponses: 1
    Dernier message: 02/09/2009, 11h34
  2. pb affichage vertical libellé dans un état
    Par conics dans le forum IHM
    Réponses: 1
    Dernier message: 25/02/2008, 17h51
  3. Réponses: 3
    Dernier message: 05/01/2007, 12h37
  4. Ajustement automatique de la taille de la police dans un TLabel
    Par Poisson Rouge dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/09/2003, 15h13
  5. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53

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