de Delphi [Ceci est une version mise à jour d'une question posée plus tôt, le titre précédent était noeud Sélection par index dans Treeview virtuel de Delphi.]défilement rapide dans Virtual Treeview
Après la meilleure partie d'un jour , Je crois que j'ai le composant Virtual Treeview (puissant mais complexe) fonctionnant d'une manière simple de deux données de table. Maintenant, j'essaie simplement de sélectionner le 1 512e (par exemple) des nœuds de niveau supérieur. Je ne vois pas d'autre moyen de le faire que d'obtenir le premier nœud de niveau supérieur et d'appeler ensuite GetNextSibling 1 511 en boucle.
Cela semble inutilement impliqué. Y a-t-il un moyen plus simple?
MISE À JOUR
Parce que l'initialisation des noeuds dans mon arbre nécessite un accès de base de données, l'initialisation tous les noeuds au démarrage est impossible. Lorsque l'utilisateur démarre avec un formulaire sans enregistrement déjà sélectionné, c'est bien. Lorsque l'utilisateur parcourt l'arborescence, suffisamment de nœuds sont remplis pour afficher la fenêtre en cours dans l'arborescence et les performances sont bonnes. Lorsque l'utilisateur démarre le formulaire en mode de dialogue avec un enregistrement de base de données déjà sélectionné, je dois avancer l'arborescence vers ce nœud avant que l'utilisateur ne voit le formulaire. C'est un problème parce que, si l'enregistrement est vers la fin de l'arbre, cela peut prendre dix secondes pendant que je marche l'arbre du premier noeud. Chaque fois que je peux GetNextSibling(), un nœud est initialisé, même si la grande majorité de ces nœuds ne sont pas affichés à l'utilisateur. Je préférerais différer l'initialisation de ces nœuds au point où ils deviennent visibles pour l'utilisateur.
Je sais qu'il doit y avoir un meilleur moyen, car si j'ouvre l'arbre sans un enregistrement sélectionné et que j'utilise la barre de défilement verticale pour me déplacer en une seule opération au milieu de l'arbre, les nœuds corrects sont affichés sans avoir à initialiser les nœuds que j'ai ignorés.
C'est l'effet que j'aimerais obtenir en ouvrant l'arborescence avec un enregistrement sélectionné. Je connais l'index du noeud que je veux aller, mais si je ne peux pas y arriver par index, je pourrais faire une recherche binaire sur l'arbre en supposant que je peux sauter un certain nombre de nœuds en arrière et en avant (similaire au milieu de l'arbre).
Alternativement, peut-être il y a un certain paramètre d'état que je peux faire à l'arborescence qui laissera les nœuds intermédiaires non initialisés pendant que je traverse la grille. J'ai essayé Begin/End Update et cela ne semble pas faire l'affaire.
Fonctionne parfaitement, avec un temps apparent nul pour parcourir plus de 9 000 noeuds. –