TREEVIEW : FASTEXPAND/FASTCLEAR/FASTCLEAN

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 26 juin 2005 à 19:32
LunaPurple Messages postés 19 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 20 octobre 2010 - 29 sept. 2008 à 16:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32337-treeview-fastexpand-fastclear-fastclean

LunaPurple Messages postés 19 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 20 octobre 2010
29 sept. 2008 à 16:47
Arf!!
Encore oublié la note.
LunaPurple Messages postés 19 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 20 octobre 2010
29 sept. 2008 à 16:44
Merci, vos astuces m'ont été très utiles !
thomthom63 Messages postés 2 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 3 avril 2007
14 févr. 2008 à 11:04
Bonne source, le fastexpand est efficace.
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
20 juil. 2005 à 12:06
Contrairement à FastClear qui énumère chaque noeud du treeview, la fonction FastClean applique Expanded = False aux seuls noeuds de la racine. Cette astuce permet de gagner quelques dizaines de ms (c pas énorme mais bon, c toujours ça :-).
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
26 juin 2005 à 21:09
LockWindowUpdate ne fonctionnant pas (et étant déconseillé par Krosoft...), j'ai utilisé l'API SendMessage : FastClear est passé en dessous des 500ms. Merci beaucoup DARKSIDIOUS !

Si vous avez d'autres idées (ou des explications, notamment pour FastClear par exemple), n'hésitez pas.
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
26 juin 2005 à 20:32
Pour répondre à liquide, remplacer EnsureVisible par Expanded = true n'améliore pas les choses chez moi. Au contraire, le contrôle "clignote" avec expand, ce qui ralentit encore plus l'opération. Pour ce qui est de FastClear(), j'ai déjà essayé en rendant le contrôle insible avant d'appliquer la méthode .clear : c'est aussi lent que SlowClear()

Je vais aller piocher du côté de LockWindowUpdate, même si masquer le contrôle n'a rien d'inesthétique je pense puisque le contrôle n'a pas le temps de s'effacer.
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
26 juin 2005 à 19:43
J'ai rien contre, mais je trouve bizarre de chercher a le rendre lent, et encore plus lent que lent a voir le code. En général, on part d'une base de programmation pour augmenter la vitesse et non l'inverse, non ?

j'entend par la que tu forces ton treeview a ralentir, en general on a la base d'un code et on l'améliore. J'ai l'impression que tu as fait l'inverse pour nous montrer de l'efficacité de ton "fast" avec la méthode "ensurevisible", qui elle, et tout le monde le sait, force l'affichage du noeud a l'ecran. Cette méthode est employable quand l'oeil de l'utilisateur voit ce qui défile et lorsqu'il doit analyser une évolution des treeviews. En dehors de ca, personne ne programmera un ensurevisible sur 2000 noeud en meme temps par exemple( ou t'es l'homme qui valait 3 milliards :))

Par ailleur pour le fastexpand, n'est il pas mieux de faire un "expand" au lieu de faire un "ensurevisible" en appelant la méthode "slow", en somme tu ralentis encore ton "fastexpand". De meme, si tu rends ton controle invisible dans la méthode fastclear, est ce que le delai ne va pas diminuer en meme temps ?

Je ne dis pas que les testes ne valent rien, mais forcer un "expand" par la méthode "ensurevisible", n'est pas la solution idéale, puisque chacune de ses propriété ont leur particularité et sont dédiés a une utilisation bien différente.
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
26 juin 2005 à 19:32
Une petite astuce qui est utile, mais pas très esthétique cependant de masquer le contrôle.

Je te conseillerai plutôt de locker le raffraichissement du contrôle lors de l'expansion ou la suppression, puis de l'unlocker après en utilisant la fonction de l'API Windows LockWindowUpdate.

Je n'ai pas essayé, mais ca devrait être autant optimisé, et ca éviterai de voir le contrôle clignoter à chaque expansion !

DarK Sidious
Rejoignez-nous