-1 votes

Quand TGraphicControl.Paint est-il appelé ?

J'essaie d'écrire un descendant de TGraphicControl personnalisé qui permettra à un utilisateur d'intégrer un SDL surface de rendu sur un formulaire VCL. Il s'agit d'un moyen simple d'afficher des animations SDL dans un formulaire.

Apparemment, un TGraphicControl est redessiné avec la méthode Paint. Combien de fois cette méthode est-elle appelée ? Est-ce seulement lorsque quelque chose se passe pour invalider le contrôle, ou y a-t-il d'autres choses qui l'appellent ? Comment cela interagit-il avec quelque chose qui fait son propre dessin ?

6voto

mghie Points 25960

La méthode Paint d'un contrôle non fenêtré (ce qu'est TGraphicControl) est appelée lorsque le contrôle fenêtré situé en dessous se redessine. Cela se produit lorsqu'un message WM_PAINT pour le contrôle fenêtré est traité.

Un contrôle fenêtré est redessiné soit lorsque la totalité de sa zone ou des parties de celle-ci ont été invalidées, soit lorsqu'une autre fenêtre qui se trouvait plus haut dans l'ordre Z est fermée ou déplacée, de sorte que la fenêtre est exposée et doit être redessinée.

L'invalidation d'un TGraphicControl calculera la partie correspondante du contrôle parent fenêtré, et invalidera cette partie.

Si vous avez besoin qu'un TGraphicControl se redessine lui-même, vous devez appeler Invalidate sur lui ou sur son contrôle parent. Il n'y a pas d'autre moyen de provoquer un redécoupage.

1voto

Kris De Decker Points 409

Question 1 : Combien de fois cela se produit-il ?

Voir réponse Mghie : chaque fois que le contrôle de fenêtre parent traite le message WM_PAINT

Question 2 : Est-ce que c'est seulement quand quelque chose arrive pour invalider le contrôle, ou y a-t-il d'autres choses qui l'appellent ?

Voir réponse Mghie : seulement quand il est invalidé.

Question 3 : Comment ça interagit avec quelque chose qui fait son propre dessin ?

Vous devez placer votre propre routine de dessin dans la méthode Paint du descendant TGraphicControl - en utilisant la directive override. Le fait de dessiner dans la méthode Paint n'enverra pas un autre message WM-PAINT. Dans la méthode Paint, vous pouvez dessiner sur le canevas sans entrer dans une boucle de messages WM-PAINT. Faites en sorte que votre code de dessin soit aussi rapide que possible, car il peut y avoir pas mal de messages WM-PAINT qui circulent. Si votre routine de dessin prend beaucoup de temps, votre application semblera lente et peu réactive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X