Bonjour
je suis sous C++ Builder et je souhaite changer la couleur d'un TButton comment ceci est il possible ??
Merci d'avance
Version imprimable
Bonjour
je suis sous C++ Builder et je souhaite changer la couleur d'un TButton comment ceci est il possible ??
Merci d'avance
Propriété Color, comme tous les contrôles.
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.
Non je veux modifier la couleur du bouton
avez vous une idée ?
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...
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.
:oops: 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]
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:
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;
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
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_SETSTATECode:
1
2
3
4
5
6
7 WndProc (msg) { TButton::WndProc(msg) if(msg.Msg==WM_PAINT) { // la code de dessin va là }
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