Tri d'un TStringGridDate de publication : 19/02/2005
Par
Pierre Castelain (Contributions) Exemple de tri par colonne d'un composant TStringGrid à l'aide d'un algorithme de tri rapide (quick sort) I. Introduction II. Comment ça marche III. Source I. Introduction
Il arrive très fréquemment que des développeurs plus ou moins débutants veuillent trier
une grille sans savoir comment y parvenir. En effet, le composant TStringGrid de base
ne propose pas cette fonctionnalité.
Je vous propose donc un exemple d'implémentation de tri basé sur la comparaison des chaînes
de caractères de la grille. L'algorithme utilisé est un tri rapide qui, comme son nom
l'indique, est un des plus rapides pour ce genre de traitement. Il n'est pas trivial à
comprendre mais ce n'est pas le propos de cet exemple.
Pour que cet exemple soit le plus utile possible, il démontre comment utiliser
un clic sur un des entêtes de colonne pour déterminer la colonne à utiliser
comme base du tri ainsi que le sens de celui-ci (ascendant ou descendant).
Le source suivant ne modifie pas l'aspect visuel des entêtes comme le font la majorité
des composants dédiés pour indiquer la colonne triée. A vous d'implémenter cette
fonctionnalité.
L'exemple évite volontairement de dériver un nouveau composant afin de rester aussi accessible
que possible. Vous aurez bien évidemment tout intérêt à le faire afin de pouvoir réutiliser
facilement ce code.
II. Comment ça marche
Voyons rapidement les mécanismes mis en oeuvre dans cet exemple.
Pour pouvoir déterminer la colonne à trier ainsi que le sens du tri, il nous faut
stocker ces deux informations. Nous le faisons en ajoutant deux propriétés à la
fenêtre : SortedCol qui stocke l'indice de la colonne triée et SortOrder
qui contient le sens du tri. L'exemple utilise l'événement OnMouseUp de la grille pour détecter le clic sur un des entêtes de colonne.
Il nous faut ensuite une méthode de tri. Celle-ci s'appelle Sort et appelle une
procédure de tri plus générale qui permet de l'utiliser sur plusieurs grilles et/ou fenêtres.
C'est la procédure QuickSort qui implémente le tri rapide en utilisant la fonction
CellCompare pour comparer le contenu de deux cellule grâce à l'utilisation de
la fonction AnsiCompareStr que vous pourrez remplacer si vous désirez trier différemment vos
données.
Pour tester cet exemple, créez un nouveau projet et ajoutez un composant TStringGrid à la
fenêtre principale. Branchez ensuite l'événement OnMouseUp du composant à la méthode
StringGrid1MouseUp de l'exemple. Vous pouvez également charger le projet de démonstration ici : démonstration III. Source
|
Copyright © 2005 Pierre Castelain. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
Copyright © 2000-2018 - www.developpez.com