BlueGEEK Journal

Accueil > Manip’s > Delphi > StringList > Comment gérer les StringList ?

Comment gérer les StringList ?

dimanche 25 septembre 2011, par bluegyn_spip

- L’objet StringList (ou "liste de chaines") permet de gérer des tableaux de chaines, de façon quasi aussi conviviale qu’un Mémo ou une ListBox mais sans être gêné et surtout ralenti par l’affichage des données.

- Il peut être intéressant de gérer une liste ordonnée par le biais d’une ListBox, en phase de débogage d’un programme, car l’affichage des données à l’écran permet de savoir exactement ce qu’on manipule, mais cette convivialité à un prix, surtout si l’on traite de grosses listes de façon répétitive, par de multiples boucles de tri et d’analyse,

  • Le programme n’avance pas, car chaque opération est obligée d’attendre la fin de l’affichage pour passer à la suivante.

- Pour accélérer le traitement d’une listBox il suffit le plus souvent de la "Masquer"

ListBox1.visible := False ;

- Mais alors, il n’y a plus beaucoup d’intérêt à utiliser un composant visuel, si c’est pour le cacher.
- Autant passer à un Objet de pure "Mémoire souterraine"

- Le StringList


MANIPULATION GLOBALE


- Comme tout Objet le StringList :

  1. Se construit
  2. S’utilise
  3. Et se jette

- Avec l’algorithme de programmation qui donne le squelette suivant

- var

  • sListe : TStringList ;

- begin
- TRY

  • sListe := TStringList.Create ;
  • sListes.Add( ’Hello’ ) ;
  • /// ShowMessage ( sListe [0]) ;

- finally

  • sListe.Free ;

- END ;

- end ;

  1. Déclaration (Var)
  2. Construction (Create)
  3. Affectation ( Add )
  4. Libération (Free)

EXEMPLE

InverseCombo

- Inverser l’ordre des entrées dans un combo :

- Le principe de la mise en cache, est de garder toujours ouvert ou prêt à ouvrir, le dernier fichier utilisé, car on sait que c’est souvent lui dont on aura besoin en priorité
- Or à chaque fois qu’on ajoute une entrée à une Liste par la méthode :

item.add ( entrée ) ;

Celle ci se place à la fin de la liste ...

- La Fonction InverseListe, permet d’inverser l’ordre des entrées en plaçant la dernière saisie en haut, et la première en bas...


- Le principe est simple ;

  • Lire la liste de bas en haut (avec DownTo)
  • La Copier dans une stringList (Add)
  • Echanger ensuite les valeurs de la StringList avec le Combo-Originel (  := )
procedure InverseCombo ( Combo : TComboBox );
// Inverse les entrées dans une combo de façon à ce que la derniere entrée soit
// toujours proposée par défaut en tête de liste (ce qui est plus logique)

var tmpListe : TStringList;
var i : integer;
Begin

TRY
tmpListe := TStringList.Create;

for i := combo.Items.Count-1 downto 0 do
        tmpListe.Add( combo.Items[i]);

 combo.Items := tmpListe;

FINALLY tmpListe.Free;
END;

End;