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 :

Changer la couleur d'un TButton


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut Changer la couleur d'un TButton
    Bonjour

    je suis sous C++ Builder et je souhaite changer la couleur d'un TButton comment ceci est il possible ??

    Merci d'avance

  2. #2
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Propriété Color, comme tous les contrôles.

  3. #3
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Est-ce que tu parle de la couleur de la police (du texte) ou du bouton en lui-même?

    Pour la police (Font), tu peux utiliser un TBitBtn (onglet supplément de la palette de composant) qui est similaire à TButton avec des fonctionnalités en plus.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut
    Non je veux modifier la couleur du bouton
    avez vous une idée ?

  5. #5
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Je m'étais posé la question a une époque et il me semble que ce n'est pas possible. D'après mes vagues souvenirs, la couleur des TButton est géré par Windows et non pas par Delphi, ce qui explique qu'il n'y ai pas de propriété Color.

    La solution est donc de dériver la classe TButton, ou d'utiliser un des nombreux composant disponible sur le net, par exemple sur Torry.net

    [EDIT:]
    En faite je viens de trouver ce lien pour modifier la couleur d'un bouton, donc a priori c'est possible. Par contre je n'ai pas vraiment le temps de me plonger dans le code ou proposer une traduction pour C++ Builder...

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Ici il y a le code en Delphi pour faire un composant ColorButton: http://www.developpez.net/forums/d38...ption-tbutton/

    Sinon, encore en Delphi, il y a ça aussi: http://www.developpez.net/forums/d15...ouleur-bouton/
    Regarde le dernier message, il y a un download pour ButtonWithColor.

  7. #7
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    La réponse me semblait tellement évidente que j'ai répondu sans essayer... Mais la propriété Color n'est effectivement pas accessible. Ils sont vraiment trop bêtes chez Borland et leurs successeurs.

    [Pub] Utilisez Free-VCL, moi je n'ai pas mis cette propriété en privé [/Pub]

  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
    Par défaut
    Salut optixpro
    C'est possible en recreant le Canvas
    Voici un code recopie qui fonctionne chez moi, si il y a une erreur dis le (code a ete reecrit manuellement)
    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
    17
    18
    19
     
    // creer un Canvas
    TControlCanvas *pCn;
    pCn = new TControlCanvas();
    pCn->Control = Button1;
     
    // mettre une couleur de fond
    pCn->Brush->Color = clGreen;
    pCn->Rectangle(4,4,((Button1->Width) - 4),(Button1->Height) - 4);
     
    // ecrire sur la couleur de fond
    TRect TheRect;
    TheRect = Rect(4,4,((Button1->Width) - 4),(Button1->Height) - 4);
    pCn->Font->Size = 15;
    pCn->Font->Color = clYellow;
    pCn->TextRect(TheRect,8,4,"Color Button1");
     
    // detruire le Canvas
    delete pCn;

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ce qui est délicat, c'est l'endroit où mettre ce code... A priori, il faut le mettre dans WndProc, donc avoir quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WndProc (msg)
    {
    TButton::WndProc(msg)
    if(msg.Msg==WM_PAINT) {
       // la code de dessin va là
    }
    Comme ca on redessine par dessus le bouton. Le problème, c'est que le bouton n'est pas redessiné seulement par WM_PAINT... L'exemple delphi cité précédemment donne également WM_NCPAINT et BM_SETSTATE

    on devrait donc avoir

    if(msg.Msg==WM_PAINT || msg.Msg==WM_NCPAINT || msg.Msg==BM_SETSTATE)

    mais il est possible qu'il faille ajouter d'autre messages, pour des cas plus rares...

    La doc Windows donne également le message suivant
    WM_CTLCOLORBTN
    hdcButton = (HDC) wParam; // handle of button display context
    hwndButton = (HWND) lParam; // handle of button

    Qui permettrait de modifier la couleur du fond et du texte d'un bouton, en lui renvoyant (dans Result) le handle d'une brush (qui servira alors à peindre le bouton)

    Normalement, ca doit être la méthode la plus propre... J'ai essayé sans succès. Si quelqu'un sait...

    Il me semble que le plus simple est d'utiliser d'autres composants que TButton. TLabel est un bon choix, dans la mesure ou l'on peut facilement le dessiner (et ou il possède des evènements MouseEnter et MouseExit), le défaut est qu'il manque certaines caractéristiques du bouton (par exemple la propriété ModalResult, ou le TabOrder (qui permet de "cliquer du clavier").

    Francois
    Dernière modification par Invité ; 01/05/2009 à 13h54.

Discussions similaires

  1. [Forms] changer les couleurs
    Par Nounoursonne dans le forum Forms
    Réponses: 11
    Dernier message: 02/04/2004, 09h40
  2. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02
  3. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37
  4. Changer les couleurs de la palette avec du RGB
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 11
    Dernier message: 13/01/2003, 08h55

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