web-dev-qa-db-fra.com

Quelle est la différence entre Actualiser, Mettre à jour et Repeindre?

Je ne sais pas laquelle de ces trois méthodes me convient le mieux. Ils travaillent tous pour moi. Quelqu'un connaît-il la différence entre Actualiser, Mettre à jour et Repeindre?

41
Ivan Prodanov

Selon la documentation en ligne.

Actualiser - Repeint le contrôle à l'écran.

Appelez la méthode Refresh pour repeindre le contrôle immédiatement. Actualiser appelle la méthode Repaint. Utilisez les méthodes Actualiser et Repeindre de manière interchangeable.

Repeindre - Force le contrôle à repeindre son image à l'écran.

Appelez Repaint pour forcer le contrôle à repeindre son image immédiatement. Si la propriété ControlStyle inclut csOpaque, le contrôle se peint directement. Sinon, la méthode Repaint appelle la méthode Invalidate, puis la méthode Update afin que toutes les parties visibles des contrôles sous le contrôle soient également repeintes.

pdate - Traite immédiatement tous les messages Paint en attente.

Appelez Update pour forcer le contrôle à être repeint avant tout autre traitement, éventuellement long. Utilisez la mise à jour pour fournir un retour immédiat à l'utilisateur qui ne peut pas attendre l'arrivée du message Windows Paint.

La mise à jour n'invalide pas le contrôle, mais oblige simplement à repeindre toutes les régions qui ont déjà été invalidées. Appelez plutôt Repaint pour invalider le contrôle également.

39
stukelly

Vous avez déjà répondu à votre question, mais si vous avez besoin de bonnes performances et de moins de scintillement, vous devriez plutôt appeler Invalidate. Il permet à Windows d'optimiser le processus de peinture.

Invalidate - Contrôle complètement repeint.

Utilisez Invalidate lorsque l'ensemble du contrôle doit être repeint. Lorsque plusieurs régions du contrôle doivent être repeintes, Invalidate entraîne le repeint de la fenêtre entière en un seul passage, évitant le scintillement provoqué par des repeints redondants. Il n'y a pas de pénalité de performance pour appeler plusieurs fois Invalidate avant que le contrôle soit réellement repeint.

33
Lars Truijens

Selon une référence VCL plus ancienne (CBuilder 6):

Invalidate "Invalidate informe un contrôle que toute sa surface doit être repeinte. L'appel d'Invalidate peut empêcher le scintillement provoqué par une série de repeints partiels. Il n'y a pas de pénalité de performance pour appeler Invalidate plusieurs fois avant que le contrôle soit réellement repeint ".

Le repeint réel ne se produit que lorsque le contrôle est mis à jour. Pour forcer une repeinture immédiate, appelez plutôt Repaint.

Repaint "TWinControl :: Repaint appelle la méthode Invalidate puis la méthode Update pour repeindre le contrôle" (légère paraphrase).

(Malheureusement, la référence plus ancienne est meilleure et plus complète que la référence plus récente que j'ai (CBuilder 2007).

3
jeff slesinger