Evènement PAINT d'un contrôle

Signaler
Messages postés
11
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2004
-
Messages postés
11
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2004
-
Bonjour,

Je voudrais savoir comment capturer l'évènement PAINT d'un controle tel que TLabel ou TButton sous Borland C++ Builder 6 ?
Ou sinon, de même avec un STATIC ou CButton sous Visual C++ 6

Merci

5 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Sous Visual C++, tu peux sous classer le controle (voir SetWindowLong sur MSDN), et traiter WM_PAINT dans la nouvelle WndProc
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Pour C++ Builder, si çà marche comme Delphi, tu as un event OnPaint dans lequel tu peux utiliser le TCanvas au lieu de l'API.
Messages postés
11
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2004

Justement, le problème est là.

Il n'y a pas dévènement onPaint dans le gestionnaire de proriétés du controle TLabel ou TButton sous Borland C++ Builder 6. Alors, comment faire ?

Merci
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Essaie de surcharger directement Paint dans ton code (section protected, je crois) avec la directive override, et appelle inherited dès le début pour que le contrôle se dessine... Ensuite, tu pourras dessiner tes propres modifications (ou tout gérer toi même, sans inherited).

Encore une fois je me base sur Delphi, donc je ne sais pas si c'est applicable (mais logiquement, çà devrait)...
Messages postés
11
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2004

J'ai réussi à surcharger la fonction qui gère les évènements du controle, mais il y a un nouveau problème, une erreur à la fermeture de l'application EStackOverFlow.

1:   //Lors de la création de la fenêtre
2:   Label1->WindowProc = Label1WndProc;
3:   
4:   //Ma fonction de gestion des évènements de mon Label1
5:   void __fastcall Label1WndProc(TMessage &message) {
6:      if(message.message == WM_PAINT)
7:         // Gestion de mon dessin
8:      else
9:         Form1->WndProc(message);
10:  }


Le problème se situerai à la ligne 9, d'après le débogueur de Borland C++ Builder 6.
Et donc, pourquoi cette erreur ?
Si j'enlève le renvoie du message par WndProc(), il n'y a plus d'erreur, mais les évènemnts autres que PAINT définie à partir de l'esplorateur de propriétés ne fonctionnent plus.
Voila

merci