Delphi - Get et Set de barre de Défilement de la Position d'une ListView

Il pourrait sembler comme une bête & simple question, et pourtant, j'ai été incapable de trouver une réponse satisfaisante. En gros, j'ai un TListview (style = vsReport) avec des données. Parfois, j'ai du le mettre à jour, et donc, je dois effacer la liste et de le remplir à nouveau avec la mise à jour des données.

Cependant, quand je fais ça, la position de la barre de défilement est réinitialisé à 0. Je voudrais être en mesure d'obtenir la barre de défilement position avant que la compensation et le ramener à ce qu'il était avant. Si la mise à jour des données a exactement le même nombre de lignes que les anciennes données, j'ai besoin de la barre de défilement pour être exactement à la même position qu'avant; si non, j'ai juste besoin qu'il soit plus ou moins à la même place qu'avant.

Semble facile, droit? Pourtant, tout ce que j'ai trouvé sont des hacks ou des réglages avec TopItem et MakeVisible. Est-il approprié de la méthode pour le faire?

Merci!

Pourquoi effacer la liste en premier lieu? Vous pouvez mettre à jour les éléments existants au lieu de cela, ce qui laisse le choix (et la barre de défilement).
Il me semblait plus logique, car la mise à jour des données peut avoir plus ou moins de lignes que d'anciennes données. Suis-je tort?
Que faire si le nombre d'éléments dans la liste augmente? Que faire si l'ancien élément est "hors service" (c'est à dire, n'apparaît pas dans la "mise à jour" de la liste)?
Votre question était: "Si la mise à jour des données a exactement le même nombre de lignes que les anciennes données". Si il y a moins de lignes, juste de mettre à jour ceux que vous avez besoin et de supprimer le reste (un par un). Si il y a des "déclassés" éléments, il suffit de remplacer le contenu actuel avec le nouveau contenu qui devrait être là, au lieu de cela maintenant. Compensation/recréer les éléments de la liste est une opération coûteuse.
Je n'ai jamais dit "supprimer des éléments à garder la barre de défilement à la même position" n'importe où dans ce que j'ai écrit. En fait, je lui ai conseillé le contraire (ne pas supprimer des éléments à tous, si vous n'avez pas à le faire). Veuillez lire ce que j'ai écrit de nouveau.

OriginalL'auteur Allain McCain | 2013-12-29