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 :

Utiliser des labels multilignes dans un programme!


Sujet :

C++Builder

  1. #1
    bruce-willis
    Invité(e)
    Par défaut Utiliser des labels multilignes dans un programme!
    J'ai remarqué qu'on ne peut pas avoir plusieurs lignes avec les labels en C++ Builder alors que c'est possible en VB.
    Dès que j'appuie sur Entrée, la saisie s'arrête.

  2. #2
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut Solution
    En effet, les labels de C++ Builder et de Delphi sont différents de VB, quand on appuie sur Entrée, cela ne crée pas une autre ligne du label.
    Mais il est possible d'avoir un label multiligne mais pas dans l'EDI.
    Pour cela, il faut éditer directement avec bloc-notes le fichier DFM, les caractères #10#13 sont à insérer pour descendre à la ligne.
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  3. #3
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Mais je me demande aussi pour accélérer les choses,
    n'existe-t-il pas des composants freewares tous faits pour écrire des labels multilignes dans l'EDI de C++ Builder.
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Les composants TBX font ça:
    http://www.g32.org/tbx/

    C'est un descendant de toolbar2k:
    http://www.jrsoftware.org/

    Les 2 sont en fait des composants de docking toolbars (pas de rapport avec un Label multiligne à priori mais...).
    Toolbar2k est excellent, mais je trouve TBX un peu lourd pour ce qu'il apporte en plus à toolbar2k.

    yarp
    www.senosoft.com

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Pour faire plus simple, tu peux peut-être aussi utiliser un TMemo avec BorderStyle=bsNone, TabStop=false, ReadOnly=true et éventuellement ParentColor=true (pour le mode Transparent) ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Sans doute en ajoutant un "\n" ...
    Ca devrait se trouver dans les "trucs et astuces" !

    A plus !

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Damned, c'est vrai, c'est encore ce qu'il y a de plus simple !
    Cela dit, ça ne fonctionne pas en mode conception.

  8. #8
    bruce-willis
    Invité(e)
    Par défaut
    Le problème avec Memo c'est qu'il est sélectionnable!

    Le problème avec "\n" c'est qu'il faut alors utiliser un code du genre
    Label1->Caption=... alors que je veux le faire directement en RAD.

    merci pour tous ces conseils!

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Dans ce cas, ce n'est pas la peine de travailler avec BCB, WORD suffit !

    Au premier niveau, BCB n'offre que des solutions génériques pour la plus part purement bureautiques !

    Autre solution : concevoir un composant répondant à ce type de comportement !
    Et dans ce cas précis, si l'éditeur de la propriété TStrings n'est pas satisfaisant tu peux très bien en concevoir un autre !
    Rien n'empèche non plus pour ce nouveau composant d'utiliser un simple AnsiString et de prendre en charge la représentation graphique de son contenu dans la zone client de ce composant, en y mettant tout ton génie !
    N'est-ce pas un minimum à attendre d'un développeur ?

    Entre nous, rajouter une ligne de code dans le constructeur de la form n'a jamais tué personne !

    A plus !

  10. #10
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut, on peut écrire un TLabel sur plusieurs lignes à sa comecption.
    Il suffit de mettre sa propriété "WordWrapd" à true et d'ajuster la taille du TLabel.

  11. #11
    bruce-willis
    Invité(e)
    Par défaut
    Salut!
    Je ne comprends pas le truc du WordWrap, j'ai essayé mais je ne vois pas aucune différence.

    A propos de:
    Entre nous, rajouter une ligne de code dans le constructeur de la form n'a jamais tué personne !
    Est-ce que tu peux me donner un tuyau, henderson!
    Actuellement, je suis à la recherche de tutoriel sur la création de composants visuels. Je sais créer des classes mais les ajouter des EVENEMENTS me posent des problèmes.

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    http://chgi.developpez.com/compo/

    ou/et

    http://dvsoft.developpez.com/Articles/EditeursProperty/

    Pour le wordwrap, il permet effectivement d'afficher le texte sur plusieurs lignes mais contrôler la façon de couper les lignes est un peu fastidieux (si tu as un texte très long).

    Tu mets Wordwrap et AutoSize à true et tu redimensionnes ton composant en longueur et en largeur. Le contenu des lignes s'adapte. Tu peux insérer des espaces pour provoquer des retours à la ligne.

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Dans un contexte d'édition normale, avec un TLabel tel qu'il est fourni par BCB, c'est l'éditeur de propriété pour AnsiString (Caption) qui prend le dessus et qui interdit la prise en compte du CR + LF.
    On est donc dans la situation où Caption ne peut être initialisé que dynamiquement, par le programme lui même pour l'obliger en prendre en compte (n) lignes :

    Dans le constructeur de la form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Label1->Caption = "Première ligne" + NL + 
    "Deuxième ligne" + NL + 
    "Troisième ligne";
    A plus !

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Oui, pour la création d'un nouveau composant, une solution serait peut-être de désactiver la propriété Caption (en partant de TCustomLabel) et d'ajouter une propriété de type TStringList qui renseigne Caption ?

  15. #15
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Dans un premier temps je me suis contenté de créer un nouveau composant dérivé de TLabel.
    Ce composant est désormais dans la palette Exemples.

    J'ai surchargé sa méthode Paint :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class PACKAGE TMyLabel : public TLabel
    {
    private:
    protected:
    public:
        __fastcall TMyLabel(TComponent* Owner);
        void __fastcall Paint();
    __published:
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TMyLabel::Paint()
    {
    TReplaceFlags Flags = Flags << rfReplaceAll;
    Caption = StringReplace(Caption, ".", "\n", Flags);
    TLabel::Paint(); // << sans quoi il ne se passe rien !
    }
    L'idée ici est de laisser l'édition de Caption par BCB, mais d'agir sur le contenu de la chaîne au moment du dessin.
    Dans cet exemple, je considière le point comme indicateur d'une nouvelle ligne.
    On peut prendre n'importe quel caractère... sauf bien entendu un VK_RETURN puisqu'il est détecté par l'éditeur des AnsiString pour terminer la saisie.

    A toi de voir... !

    A plus !

  16. #16
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Désolé du retard,
    Si tu mets la propriété WordWrap à true, et qu'ensuite tu modifies la taille de ton TLabel en longueur et hauteur, le nombre de ligne s'adaptera automatiquement.

    Je ne sais pas si c'est clair, mais c'est simple à faire

  17. #17
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    L'expert CnWizard (le truc qui va avec le CnPack) change l'éditeur de propriété et permet ainsi le multiligne.

  18. #18
    bruce-willis
    Invité(e)
    Par défaut
    Merci à vous tous: josse65, henderson, etc.

    J'ai tenu compte de tous vos conseils! tous ont été des bons conseils! Thanks

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/05/2008, 13h54
  2. utiliser des fichiers .o dans un programme
    Par Sylar44 dans le forum C++
    Réponses: 26
    Dernier message: 11/01/2008, 16h34
  3. utilisation des commandes shell dans un programme C
    Par rasgueados dans le forum Linux
    Réponses: 15
    Dernier message: 03/08/2006, 17h25
  4. Utiliser des Assembly .Net dans Visual C++ 6.0
    Par nitram dans le forum MFC
    Réponses: 1
    Dernier message: 15/06/2005, 09h05
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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