Accueil > > > ACCÉLÉRATION DE LA VITESSE D'AFFICHAGE EN "GELANT" LE RAFRAÎCHISSEMENT D'UN CONTRÔLE
ACCÉLÉRATION DE LA VITESSE D'AFFICHAGE EN "GELANT" LE RAFRAÎCHISSEMENT D'UN CONTRÔLE
Information sur la source
Description
Généralement, lorsqu'on ajoute beaucoup d'éléments à une liste à l'aide d'une boucle et qu'on utilise DoEvents, il se produit un effet de clignotement de la liste (à moins qu'on n'ait masqué celle-ci). La source que je vous propose fait appel à 2 API qui permettent de "geler" et "dégeler" le rafraîchissement de cette liste ce qui accélère également le remplissage de la liste en question (voir le screenchot pour comparer l'ajout de 1000 éléments dans une ListView en utilisant les deux méthodes). Les API en question sont InvalidateRect() et ValidateRect()
Source
- 'API pour mesurer le temps écoulé
- Private Declare Function GetTickCount Lib "kernel32" () As Long
-
- 'API permettant de "geler" la mise à jour d'un objet
- Private Declare Sub InvalidateRect Lib "user32" (ByVal hWnd As Long, ByVal t As Long, ByVal bErase As Long)
- Private Declare Sub ValidateRect Lib "user32" (ByVal hWnd As Long, ByVal t As Long)
- ' 1000 éléments sont ajoutés à la ListView via une boucle rendant régulièrement la main à Windows
- ' mais ici, on utilise 2 API permettant de "geler" et "dégeler" le rafraîchissement de la liste.
- ' La liste "clignote" moins voire pas du tout si on annule la ligne (=>)
-
- Private Sub Command2_Click()
-
- Dim nStart As Long
- Dim i As Integer
-
- nStart = GetTickCount()
- ListView1.View = 3
-
- ListView1.ListItems.Clear
-
- For i = 1 To 1000
- ListView1.ListItems.Add , , "Chaîne " & CStr(i)
-
- '-- En validant la région, il n'y aura pas de génération d'un message WM_PAINT
- ValidateRect ListView1.hWnd, 0&
-
- '-- "Rafraîchit" la liste
- '(=>) Essayez également en désactivant cette ligne...
- If (i Mod 10) = 0 Then InvalidateRect ListView1.hWnd, 0&, 0&
-
- '-- Autorise le multi-tâche
- DoEvents
- Next i
-
- InvalidateRect ListView1.hWnd, 0&, 0&
- MsgBox Str(GetTickCount() - nStart) & " ms", vbOKOnly, "Avec optimisation :"
-
- End Sub
'API pour mesurer le temps écoulé
Private Declare Function GetTickCount Lib "kernel32" () As Long
'API permettant de "geler" la mise à jour d'un objet
Private Declare Sub InvalidateRect Lib "user32" (ByVal hWnd As Long, ByVal t As Long, ByVal bErase As Long)
Private Declare Sub ValidateRect Lib "user32" (ByVal hWnd As Long, ByVal t As Long)
' 1000 éléments sont ajoutés à la ListView via une boucle rendant régulièrement la main à Windows
' mais ici, on utilise 2 API permettant de "geler" et "dégeler" le rafraîchissement de la liste.
' La liste "clignote" moins voire pas du tout si on annule la ligne (=>)
Private Sub Command2_Click()
Dim nStart As Long
Dim i As Integer
nStart = GetTickCount()
ListView1.View = 3
ListView1.ListItems.Clear
For i = 1 To 1000
ListView1.ListItems.Add , , "Chaîne " & CStr(i)
'-- En validant la région, il n'y aura pas de génération d'un message WM_PAINT
ValidateRect ListView1.hWnd, 0&
'-- "Rafraîchit" la liste
'(=>) Essayez également en désactivant cette ligne...
If (i Mod 10) = 0 Then InvalidateRect ListView1.hWnd, 0&, 0&
'-- Autorise le multi-tâche
DoEvents
Next i
InvalidateRect ListView1.hWnd, 0&, 0&
MsgBox Str(GetTickCount() - nStart) & " ms", vbOKOnly, "Avec optimisation :"
End Sub
Conclusion
'============================ PS: Encore une source qui n'est pas de moi mais... vous connaissez la chanson...
Cette source est extraite d'un article de Xavier LECLERCQ consacré à l'optimisation du code en VB paru dans la revue "Programmez!" du mois de Novembe 2000 (n° 26)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|