IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le StringGrid facile avec Lazarus


précédentsommairesuivant

III. Remplir la grille

Le projet permet de construire un formulaire affichant une grille et un bouton qui alternativement remplit et vide une case. La 3e étape aborde les titres de la colonne et de la ligne fixes, l'alternance des couleurs et le remplissage de toutes les autres cellules.
La gestion de l'événement Création du formulaire va donner l'occasion « d'habiller » l'ensemble de la grille, avant tout autre traitement.

III-1. Numérotation des lignes

Image non disponible

C'est l'opération la plus simple : cliquer sur la grille pour faire apparaître l'inspecteur d'objets.

La ligne Options de l'onglet Propriétés présente à sa gauche un petit signe + : cliquer dessus pour faire apparaître les options disponibles.

À la ligne goFixedRowNumbering, écrire (basculer sur) True à la place de False.

C'est fait : appuyer sur la touche F9, le formulaire apparaît avec la numérotation des lignes sur la colonne fixe de gauche.

L'identification des colonnes est différente : la propriété Columns donne accès à un éditeur qui permet de définir les titres de chaque colonne une par une. Ce processus peut devenir rapidement laborieux, il est donc préférable d'envisager l'édition des titres au sein du code : voir plus loin.

III-2. Alternance des couleurs

Image non disponible

Une propriété intéressante de la grille est nommée AlternateColor. Par défaut, sa valeur est clWindow. D'autres couleurs sont disponibles. Par exemple choisir clMoneyGreen. Appuyer sur F9 : les lignes sont colorées blanc/vert alternativement, ce qui peut rendre bien des services pour se repérer dans un tableau de grandes dimensions. Pour la suite, revenir sur clWindow.

III-3. Événement OnCreate

Image non disponible

Le clic de la souris a déjà permis de remplir une case de la grille. Mais il existe des événements qui se déclenchent automatiquement, par exemple lors de la création du formulaire.

Retour sur le formulaire : un clic ramène l'inspecteur d'objets sur ses propriétés. Cliquer sur le volet Evénements. Un clic sur la méthode OnCreate, et dans la zone qui se libère, entrer CreationFormulaire (sans accent) et appuyer sur Entrer. L'éditeur de source réapparaît, une nouvelle procédure est créée, elle sera exécutée à chaque lancement du programme.

Dans cette procédure, les titres des colonnes seront définis. Par exemple Col 1, Col 2, etc.

 
Sélectionnez
procedure TMonFormulaire.CreationFormulaire(Sender: TObject);
var i : Integer;
begin
    With MaGrille do
 
       For i:=1 To ColCount-1 do
          Cells[i,0]:='Col '+IntToStr(i);
end;

Noter la variable ColCount qui conserve le nombre de colonnes choisi. De même, RowCount désigne le nombre de lignes. La variable compteur i est locale : elle doit donc être déclarée avant le mot clé begin.

Un appui sur F9 et la grille apparaît : lignes et colonnes sont identifiées clairement.

Pour remplacer la notation Col 1, Col 2, etc. par Col A, Col B, etc., il suffit de remplacer la chaîne 'Col '+IntToStr(i) par 'Col '+Chr(64+i).
Dans ce cas, il faudra traiter le cas des grilles dont le nombre de colonnes dépasse 26, pour doubler par exemple le nombre des lettres.

Néanmoins, la simple numérotation des lignes peut se révéler insuffisante dans certaines applications. La désignation des lignes pourra être imposée par le code. Si on souhaite par exemple la notation Lig 1, Lig 2, etc. le code s'écrira :

 
Sélectionnez
For i:=1 to RowCount-1 do
          Cells[0,i]:='Lig '+IntToStr(i);

Si la numérotation automatique des lignes est activée, la nouvelle désignation remplacera les numéros.

III-4. Autres cases

Le remplissage des autres cases de la grille est réalisé en fonction de l'application souhaitée : à partir d'un fichier texte, d'une base de données, du presse-papier... ou manuellement. Ici, les cases seront remplies par des numéros très simples à constituer. Une variable i va balayer les colonnes, une autre j va balayer les lignes. La cellule de la colonne 1, ligne 1 portera le n° 1. Le numéro des autres cases sera donc i+(RowCount-1)*(j-1). Ce qui donne :

 
Sélectionnez
For i:=1 to ColCount-1 do
   For j:=1 to RowCount-1 do      
       Cells[i,j]:=IntToStr(i+(RowCount-1)*(j-1));

Un appui sur F9 permet d'étudier le résultat : la grille est complète, l'utilisation des ascenseurs montre que la dernière case porte bien le bon numéro.

Image non disponible

1. La variable j doit être déclarée en début de procédure.

2. Pour afficher non pas des numéros bien ordonnés mais des nombres au hasard, la dernière ligne deviendra
Cells[i,j]:=IntToStr(1+Random(10000));
Au début de la procédure de création du formulaire, l'instruction Randomize provoquera l'initialisation des nombres pseudo-aléatoires.

Un clic sur le bouton Affichage montre que son fonctionnement n'a pas été altéré.

Le code de la procédure CreationFormulaire se présente maintenant comme suit :

 
Sélectionnez
procedure TMonFormulaire.CreationFormulaire(Sender: TObject);
var i, j : Integer;
begin
    Randomize;       
    With MaGrille do
       Begin
       For i:=1 To ColCount-1 do
          Cells[i,0]:='Col '+IntToStr(i);
       For i:=1 to RowCount-1 do
          Cells[0,i]:='Lig '+IntToStr(i);
       For i:=1 to ColCount-1 do
           For j:=1 to RowCount-1 do
               //Cells[i,j]:=IntToStr(i+(RowCount-1)*(j-1));
               Cells[i,j]:=IntToStr(1+Random(10000));
       End;
 
end;

III-5. Bilan

Image non disponible

Cette troisième étape a conduit au remplissage de la totalité de la grille et à l'identification claire de chacune de ses lignes et colonnes.

La suite fera intervenir les déplacements de la souris et permettra de déterminer -et d'afficher- ses coordonnées ainsi que les numéros de ligne et de colonne correspondants.


précédentsommairesuivant

Copyright © 2010 Dimanche2003. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.