Вы находитесь на странице: 1из 38

Le StringGrid facile avec Lazarus

par Dimanche2003
Date de publication : 24/10/2010 Dernire mise jour : 24/10/2010

l'heure o l'on sait tout sur le graphne et ses inventeurs, Andr Geim et Konstantin Novoselov, grce au Nobel de physique, qui connat Jesus Reyes Aguilar ? Les pages qui suivent constituent une introduction au composant TStringGrid : quelques lignes de code suffiront pour rvler une petite partie de sa puissance au sein de l'environnement Lazarus. Mais derrire ces quelques lignes se cache un outil impressionnant, l'unit Grids.pas, avec ses 10186 lignes de code dans l'dition du 25 septembre 2009, mis disposition de la communaut mondiale par son auteur, Jesus Reyes Aguilar. Hommage. Le code correspond la version 0.9.28.2 beta de Lazarus, sous Vista 32 bits. J'adresse mes remerciements

jacques_jean pour sa relecture.

Le StringGrid facile avec Lazarus par Dimanche2003

I - Le formulaire........................................................................................................................................................... 4 I.1 - Cration du formulaire : nom, dimensions..................................................................................................... 4 I.2 - Enregistrement du projet................................................................................................................................ 5 I.3 - Rsultat........................................................................................................................................................... 5 II - La grille...................................................................................................................................................................5 II.1 - Introduction de la grille.................................................................................................................................. 5 II.2 - Premire utilisation........................................................................................................................................ 7 II.3 - Bilan............................................................................................................................................................... 8 III - Remplir la grille..................................................................................................................................................... 9 III.1 - Numrotation des lignes.............................................................................................................................10 III.2 - Alternance des couleurs............................................................................................................................. 11 III.3 - vnement OnCreate................................................................................................................................. 12 III.4 - Autres cases............................................................................................................................................... 13 III.5 - Bilan............................................................................................................................................................ 15 IV - Coordonnes de la souris.................................................................................................................................. 15 IV.1 - L'vnement OnMouseMove...................................................................................................................... 16 IV.2 - Coordonnes colonne et ligne................................................................................................................... 18 IV.3 - Bilan............................................................................................................................................................ 19 V - Edition des cases, curseur.................................................................................................................................. 19 V.1 - Options dimensions et dition..................................................................................................................... 20 V.2 - L'vnement OnDrawCell............................................................................................................................ 21 V.3 - Surlignement de la ligne, de la colonne......................................................................................................23 V.4 - Horizontale et verticale................................................................................................................................ 25 V.5 - Cadre........................................................................................................................................................... 26 V.6 - Bilan............................................................................................................................................................. 28 VI - Mise en oeuvre des options............................................................................................................................... 28 VI.1 - Liste des options disponibles..................................................................................................................... 28 VI.2 - Curseurs..................................................................................................................................................... 29 VI.3 - Remplissage de la grille.............................................................................................................................31 VI.3.A - Couleur de la grille............................................................................................................................ 32 VI.3.B - Texte des cellules.............................................................................................................................. 33 VI.4 - Bilan............................................................................................................................................................35

-3Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

I - Le formulaire
Ce premier chapitre expose la faon de crer un formulaire, avec prsentation de quelques paramtres.

I.1 - Cration du formulaire : nom, dimensions


Pour charger la version complte du logiciel (gratuit), cliquer sur le bouton vert Download Now ! situ sur la page http://sourceforge.net/projects/lazarus/files/. Une fois l'installation termine, lancer Lazarus, cliquer sur Fichier/Nouveau/Projet/Application :

puis sur le bouton OK de la fentre. Lazarus cre un formulaire dont les proprits sont affiches dans une fentre spcialise, l'inspecteur d'objets. Dans cette fentre, on va diter (modifier) quatre proprits, par ordre alphabtique : Caption : remplacer Form1 par MonFormulaire ; Height : remplacer 300 par 400 ; Name : remplacer Form1 par MonFormulaire ; Width : remplacer 400 par 600.

Le dessin de la fentre est maintenant termin.

-4Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

I.2 - Enregistrement du projet


Les tapes suivantes sont ncessaires pour tester, modifier et relancer volont notre projet : 1. Il faut le sauvegarder ; Pour cela, il faut crer un rpertoire avec l'aide de l'explorateur, il s'appellera par exemple EssaiStringGrid. 2. Cliquer ensuite sur Fichier/Enregistrer-sous dans la barre de menu de Lazarus. Chercher le nouveau rpertoire et renommer Unit1.pas en EssaiGrille.pas. Une fentre propose de tout mettre en minuscules, choisir Prserver ; 3. Une nouvelle fentre propose d'enregistrer le projet sous le nom project1.lpr, remplacer ce nom par ProjetGrille.lpr, qui est plus explicite ; 4. Enfin, il faut configurer le compilateur pour que le programme crer soit crit dans le bon rpertoire : cliquer sur Projet, Options du compilateur. Sur la ligne Rpertoire de sortie, cliquer sur le bouton o apparaissent trois points. Une fentre Recherche de dossier apparat, choisir le mme rpertoire que prcdemment et cliquer sur OK. Pour lancer l'excution, cliquer sur le petit triangle vert, ou cliquer sur Excuter/Excuter, ou appuyer sur la touche F9. Pour y voir plus clair, il est prfrable de rduire la prsence de Lazarus sur l'cran en cliquant sur le petit segment horizontal en haut et droite de l'diteur. Une fentre intitule MonFormulaire apparat, avec gauche du titre une icne Lazarus et droite les trois boutons de rduction, d'extension et de clture. Pour fermer cette fentre, cliquer sur le bouton de clture, ou sur le petit carr rouge qui apparat dans la barre de menus de Lazarus. Chacune de ces deux actions interrompt l'excution : cliquer sur OK pour confirmer.

I.3 - Rsultat
Avec l'explorateur, ouvrir le rpertoire EssaiStringGrid : on peut ainsi constater que la compilation a produit un fichier excutable nomm ProjetGrille.exe, d'une taille respectable puisqu'elle atteint 12 Mo, alors qu'aucune ligne de code n'a encore t crite : Lazarus a dj incorpor au programme un grand nombre de fonctions (bibliothques) susceptibles d'tre actives trs simplement selon les besoins qui pourraient apparatre ultrieurement. Cette fentre en apparence simpliste possde de nombreuses proprits : on peut la dplacer, modifier ses dimensions, la fermer... mais on ne peut rien y inscrire pour l'instant. L'tape suivante introduit un composant puissant : le StringGrid.

II - La grille
Le formulaire est cr : il va tre utilis comme conteneur pour recevoir un composant, le TstringGrid. La gestion d'un vnement va permettre de remplir et effacer une case.

II.1 - Introduction de la grille


Le projet intitul ProjetGrille aboutit pour l'instant une simple fentre appele MonFormulaire qui sera utilise pour recevoir une grille. Ouvrir le projet. Pour cela, avec l'explorateur, ouvrir le rpertoire EssaiStringGrid et double-cliquer sur le fichier ProjetGrille.lpi : Lazarus se lance et affiche le projet. Pour faire apparatre la fentre du projet, cliquer sur Voir/Fiches et choisir MonFormulaire. Autre mthode : appuyer simultanment sur les touches Shift et F12 ; ou encore, cliquer sur la deuxime icne de la 2e ligne, sous Fichier. Il s'agit de placer sur la fentre du projet un composant StringGrid. Les principaux composants s'affichent sous forme d'icne : sur la 2e ligne du menu apparat l'onglet Standard, puis l'onglet Additional, puis CommonControls...

-5Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Dans l'onglet Additional, dans le 3e tiers de la ligne d'icnes apparat le composant TStringGrid qui se distingue par les trois lettres abc. Cliquer une fois dessus : il est entour d'un gris qui indique la slection. Pour le glisser dans la fentre, il suffit maintenant de cliquer une fois dans la fentre. Le composant s'insre prcisment au point o la fentre a reu le clic. L'inspecteur d'objets reconnat maintenant deux objets : MonFormulaire et StringGrid1. Un clic sur le second fait apparatre ses proprits modifiables, les vnements que l'on pourra utiliser, les favoris et les restrictions. Dans l'onglet Proprits, quelques valeurs vont tre modifies : 1 ColCount : passer de 5 21 (nombre de colonnes) ;

-6Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

2 3 4 5 6 7

Height : passer de 100 300, (hauteur visible de la grille) ; Left : passer de 10 0, (espace entre la gauche de la fentre et la gauche du composant) ; Name : passer de StringGrid1 MaGrille, (nom utilisable dans le code) ; RowCount : passer de 5 21 (nombre de lignes) ; Top : passer de 10 0 (espace entre le haut de la fentre et le haut du composant) ; Width : passer de 200 600 (largeur visible de la grille). Certaines modifications peuvent tre menes graphiquement, directement depuis la fentre : l'aide de la souris, il est facile de placer le composant en haut et gauche de la fentre (mise zro de Top et Left), et d'tirer le composant pour ajuster ses dimensions aux valeurs souhaites (Height et Width).

Les autres proprits sont toujours accessibles via l'inspecteur d'objets, ou encore en crivant quelques lignes de code.

II.2 - Premire utilisation


En premire tape, il faut vrifier que la grille peut afficher une information et l'effacer. Pour cela, insrer un bouton dans MonFormulaire (Voir/Composant/TButton), le positionner dans la partie infrieure droite de MonFormulaire et modifier son titre (Caption) en remplaant Button1 par Affichage. L'ide est de cliquer sur le bouton pour crire le mot Bonjour dans la case qui a 1,1 pour coordonnes. Si la case est vide, ce mot est inscrit. Sinon, elle sera vide. Le code s'crit ainsi :
With MaGrille do If Cells[1,1]='' Then Cells[1,1]:='Bonjour' Else Cells[1,1]:='';

Explications : au lieu d'crire trois fois MaGrille.Cells[1,1], syntaxe normale, il est plus rapide de dclarer l'identification de Cells par l'instruction With MaGrille do... Mais o crire ces lignes ? Lazarus fait tout, ou presque : revenir au formulaire et double-cliquer sur le bouton Affichage : le formulaire passe au second plan au bnfice de l'diteur de source, le curseur clignote prcisment sur la nouvelle procdure cre automatiquement :
procedure TMonFormulaire.Button1Click(Sender: TObject); begin end;

Entre les mots cls begin et end, insrer le code prcdent, ce qui donne :
procedure TMonFormulaire.Button1Click(Sender: TObject); begin With MaGrille do If Cells[1,1]='' Then Cells[1,1]:='Bonjour' Else Cells[1,1]:=''; end;

La touche F9 lance l'excution du projet ; elle procde en outre l'enregistrement du code et la fabrication du fichier excutable EssaiGrille.exe. Un clic sur le bouton Affichage fait apparatre le mot Bonjour, un second l'efface.

-7Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Soit, ce n'est pas grand-chose, mais un peu de fantaisie pourrait faire apparatre galement les mots Au revoir... L'affichage pourrait se faire dans une case choisie au hasard... Il suffit pour cela d'un peu d'imagination et de quelques modifications du code... tous les outils sont disponibles ! noter : Les indices des cases commencent par zro, les colonnes d'abord, les lignes ensuite. MaGrille.Cells[i, j] dsigne donc la case de la (i+1)me colonne et de la (j+1)me ligne de la grille appele MaGrille. Le contenu du composant StringGrid est toujours de type chane (String). L'affectation d'une valeur numrique provoquera donc une erreur. On crira plutt : MaGrille.Cells[i, j]:='123'; ou encore MaGrille.Cells[i, j]:=IntToStr(123); L'affectation d'une valeur chane peut galement provoquer une erreur. Par exemple MaGrille.Cells[i, j]:=Bonjour; Dans ce cas, le compilateur cherche la variable de type String du nom de Bonjour, qui n'existe pas. Il faut donc bien crire comme prcdemment MaGrille.Cells[i, j]:='Bonjour';

II.3 - Bilan

Le formulaire contient maintenant un composant Grille, dont on peut rgler volont le nombre de lignes et de colonnes et afficher ce que l'on souhaite dans chacune de ses cases.
-8Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Un composant Bouton est utilis pour modifier la grille. Pour cela, une procdure dtecte le clic sur le bouton et l'interprte pour lancer une action. La phase suivante va permettre d'identifier les lignes et les colonnes et de prsenter un remplissage des cases. Un clic sur le petit carr rouge du menu interrompt l'excution et rend la main Lazarus.

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'vnement Cration du formulaire va donner l'occasion d'habiller l'ensemble de la grille, avant tout autre traitement.

-9Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

III.1 - Numrotation des lignes

C'est l'opration la plus simple : cliquer sur la grille pour faire apparatre l'inspecteur d'objets. La ligne Options de l'onglet Proprits prsente sa gauche un petit signe + : cliquer dessus pour faire apparatre les options disponibles. la ligne goFixedRowNumbering, crire (basculer sur) True la place de False. C'est fait : appuyer sur la touche F9, le formulaire apparat avec la numrotation des lignes sur la colonne fixe de gauche. L'identification des colonnes est diffrente : la proprit Columns donne accs un diteur qui permet de dfinir les titres de chaque colonne une par une. Ce processus peut devenir

- 10 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

rapidement laborieux, il est donc prfrable d'envisager l'dition des titres au sein du code : voir plus loin.

III.2 - Alternance des couleurs

Une proprit intressante de la grille est nomme AlternateColor. Par dfaut, sa valeur est clWindow. D'autres couleurs sont disponibles. Par exemple choisir clMoneyGreen. Appuyer sur F9 : les lignes sont colores blanc/vert alternativement, ce qui peut rendre bien des services pour se reprer dans un tableau de grandes dimensions. Pour la suite, revenir sur clWindow.

- 11 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

III.3 - vnement OnCreate

Le clic de la souris a dj permis de remplir une case de la grille. Mais il existe des vnements qui se dclenchent automatiquement, par exemple lors de la cration du formulaire. Retour sur le formulaire : un clic ramne l'inspecteur d'objets sur ses proprits. Cliquer sur le volet Evnements. Un clic sur la mthode OnCreate, et dans la zone qui se libre, entrer CreationFormulaire (sans accent) et appuyer sur Entrer. L'diteur de source rapparat, une nouvelle procdure est cre, elle sera excute chaque lancement du programme. Dans cette procdure, les titres des colonnes seront dfinis. Par exemple Col 1, Col 2, etc.

- 12 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003 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 mme, RowCount dsigne le nombre de lignes. La variable compteur i est locale : elle doit donc tre dclare avant le mot cl begin. Un appui sur F9 et la grille apparat : lignes et colonnes sont identifies clairement. Pour remplacer la notation Col 1, Col 2, etc. par Col A, Col B, etc., il suffit de remplacer la chane 'Col '+IntToStr(i) par 'Col '+Chr(64+i). Dans ce cas, il faudra traiter le cas des grilles dont le nombre de colonnes dpasse 26, pour doubler par exemple le nombre des lettres. Nanmoins, la simple numrotation des lignes peut se rvler insuffisante dans certaines applications. La dsignation des lignes pourra tre impose par le code. Si on souhaite par exemple la notation Lig 1, Lig 2, etc. le code s'crira :
For i:=1 to RowCount-1 do Cells[0,i]:='Lig '+IntToStr(i);

Si la numrotation automatique des lignes est active, la nouvelle dsignation remplacera les numros.

III.4 - Autres cases


Le remplissage des autres cases de la grille est ralis en fonction de l'application souhaite : partir d'un fichier texte, d'une base de donnes, du presse-papier... ou manuellement. Ici, les cases seront remplies par des numros trs 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 numro des autres cases sera donc i+(RowCount-1)*(j-1). Ce qui donne :
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 rsultat : la grille est complte, l'utilisation des ascenseurs montre que la dernire case porte bien le bon numro.

- 13 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

1. La variable j doit tre dclare en dbut de procdure. 2. Pour afficher non pas des numros bien ordonns mais des nombres au hasard, la dernire ligne deviendra Cells[i,j]:=IntToStr(1+Random(10000)); Au dbut de la procdure de cration du formulaire, l'instruction Randomize provoquera l'initialisation des nombres pseudo-alatoires. Un clic sur le bouton Affichage montre que son fonctionnement n'a pas t altr. Le code de la procdure CreationFormulaire se prsente maintenant comme suit :
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);

- 14 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003 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

Cette troisime 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 dplacements de la souris et permettra de dterminer -et d'afficher- ses coordonnes ainsi que les numros de ligne et de colonne correspondants.

IV - Coordonnes de la souris
Dans son avancement actuel, le projet construit une grille entirement remplie, colonnes et lignes clairement identifies. Un bouton permet d'diter une case.

- 15 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Cette nouvelle tape va utiliser l'vnement OnMouseMove qui dtecte la position de la souris au-dessus de la grille et informe le programme de ses coordonnes au pixel prs.

IV.1 - L'vnement OnMouseMove

Pour relancer Lazarus et afficher le code du projet, ouvrir le rpertoire EssaiStringGrid et double-cliquer sur le fichier ProjetGrille.lpi. La deuxime icne de la deuxime ligne donne accs aux fiches : cliquer sur MonFormulaire puis sur OK ; cliquer sur la grille : l'inspecteur d'objets affiche les proprits et les vnements associs. Dans l'onglet Evnements, chercher OnMouseMove, cliquer dessus : une zone de saisie apparat, crire le nom de la procdure crer, ici CoordSouris, appuyer sur Entrer. Cette commande remet l'diteur de source au premier plan, le curseur clignotant l'intrieur de la nouvelle procdure qui se prsente ainsi :

- 16 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

procedure TMonFormulaire.CoordSouris(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin end;

Que reprsentent les variables X et Y qui apparaissent dans les paramtres de cette procdure ? Pour le savoir, il suffit de les afficher dans la grille. Entre les mots begin et end ci-dessus, il suffit d'crire :
With MaGrille do begin Cells[1,2]:='X ='+IntToStr(X); Cells[1,3]:='Y ='+IntToStr(Y); end;

Un appui sur F9 lance l'excution. Rien ne se passe, en apparence. Par contre, si le curseur de la souris entre dans la surface occupe par la grille, les deux cases choisies affichent les coordonnes du curseur, avec une mise jour automatique en fonction des mouvements de la souris. Si le curseur est plac dans l'angle suprieur gauche, les coordonnes sont 0, 0. Dans l'angle infrieur droit, les coordonnes deviennent 578, 278. Les dimensions de la grille avaient t fixes 600 par 300 ? L'cart reprsente prcisment la largeur des ascenseurs qui permettent de naviguer dans les parties caches de la grille. En conclusion, la procdure CoordSouris communique en permanence les coordonnes de la souris au pixel prs.

- 17 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

IV.2 - Coordonnes colonne et ligne


Pour obtenir les numros de colonne et de ligne partir des coordonnes X et Y de la souris, il faut utiliser la procdure MouseToCell(X, Y, sCol, sLig) qui fait directement la conversion. L'introduction de deux nouvelles variables sCol et sLig impose une dclaration en tte de la procdure (variables locales) ou avant l'implmentation (variables globales). Pour afficher le rsultat, le plus simple est d'utiliser la case reste vide en haut et gauche de la grille (coordonnes 0,0). La procdure CoordSouris se prsente alors comme suit :
procedure TMonFormulaire.CoordSouris(Sender: TObject; Shift: TShiftState; X, Y: Integer); var sCol, sLig : Integer; begin With MaGrille do begin Cells[1,2]:='X ='+IntToStr(X); Cells[1,3]:='Y ='+IntToStr(Y); - 18 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003 MouseToCell(X, Y, sCol, sLig); Cells[0,0]:='C '+IntToStr(sCol)+' - L '+IntToStr(sLig); end;

end;

Un appui sur la touche F9 lance l'excution et permet de vrifier le bon fonctionnement du projet.

IV.3 - Bilan
Dans son tat actuel, le projet construit une grille compltement remplie et renseigne. La position de la souris est dtecte et affiche sous les formes de coordonnes graphiques (X et Y) et logiques (colonne, ligne). Lors de la prochaine tape, la position de la souris sera mise en valeur par l'introduction de couleurs et de lignes. Chaque cellule pourra en outre tre modifie indpendamment.

V - Edition des cases, curseur


La grille produite par le projet est complte, mais ses cases ne sont pas modifiables. Les coordonnes de la souris sont affiches, mais le curseur reste trs discret ce qui peut constituer un handicap dans le cas de grilles de grandes dimensions. L'apparition de couleurs sur le passage de la souris localiserait plus facilement sa position.
- 19 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

L'vnement OnDrawCell va autoriser l'affichage de ce curseur particulier.

V.1 - Options dimensions et dition


Les dimensions de la grille (hauteur, largeur, nombre de colonnes, nombre de lignes, largeur de colonne, hauteur de ligne) sont renseignes dans l'inspecteur d'objets. Retourner sur les options : un clic sur le signe + dveloppe les possibilits. 1. Cliquer sur goColSizing, passer la valeur True (largeur des colonnes). 2. Cliquer sur goEditing, passer la valeur True (les cases peuvent tre modifies). 3. Cliquer sur goRowSizing, passer la valeur True (hauteur des lignes). Appuyer sur F9 pour lancer l'excution et vrifier que chaque case peut tre dite, que chaque colonne, chaque ligne peut tre ajuste en dimensions : les interventions sont possibles partir des ligne et colonne fixes uniquement. Cliquer sur le petit carr rouge qui stoppe l'excution et cliquer sur OK pour rendre la main Lazarus.

- 20 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

V.2 - L'vnement OnDrawCell

Cliquer sur la grille, puis sur l'inspecteur d'objets, volet vnements et sur OnDrawCell. Dans la zone de saisie, crire DessinGrille et appuyer sur Entrer. Dans l'diteur de source, une nouvelle procdure apparat, DessinGrille, avec ses divers paramtres. aCol et aRow dsignent respectivement la colonne courante et la ligne courante, aRect est la cellule situe leur intersection. Cette procdure est excute lors de la cration de la grille, puis chaque instruction Repaint. Par ailleurs, le programme connat sCol et sLig, qui sont respectivement la colonne et la ligne survoles par la souris.

- 21 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

En conclusion, la condition (aCol=sCol) And (aRow=sLig) identifie la case survole par la souris. Pour colorer en jaune la case survole par la souris, le code s'crira donc ainsi :
procedure TMonFormulaire.DessinGrille(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); begin With MaGrille.Canvas do begin If ((aCol=sCol) And (aRow=sLig)) Then Brush.Color:=clYellow; FillRect(aRect); end; end;

Un appui sur F9 permet de vrifier que... le code ne fonctionne pas comme prvu. En effet, deux complments sont ncessaires : 1. Les variables sCol et sLig sont dclares au sein d'une procdure, donc ignores de la nouvelle. Il est donc ncessaire de supprimer la premire dclaration et de la reporter en tte du programme, avant le mot cl implementation :
var MonFormulaire: TMonFormulaire; sCol, sLig : Integer; implementation { TMonFormulaire }

2. La procdure est lance au dmarrage et il faut la relancer chaque fois que la souris se dplace. Donc dans la procdure CoordSouris, il faut ajouter l'instruction Repaint. Ds que la souris se dplace, l'vnement est dtect et trait dans le cadre de la procdure CoordSouris. Il suffit d'ajouter l'instruction Repaint dans cette procdure pour que la mise jour graphique soit dclenche. Un appui sur F9 montre que cette fois le but recherch est atteint.

- 22 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

V.3 - Surlignement de la ligne, de la colonne


Pour mettre en valeur la totalit de la ligne survole par la souris, il suffit de remplacer la condition If ((aCol=sCol) And (aRow=sLig)) par : If (aRow=sLig)... --> toute la ligne est surligne.

- 23 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Si au contraire, c'est l'ensemble de la colonne que l'on dsire surligner, la condition deviendra : If (aCol=sCol)... --> toute la colonne est surligne.

- 24 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Pour mettre une couleur dans toutes les cellules, il suffit de la dclarer avec Brush.Color avant l'introduction des conditions. La logique se prsenterait ainsi : Brush.Color:=Couleur0; Si condition1, Brush.Color:=Couleur1; Si condition2, Brush.Color:=Couleur2; ... FillRect(aRect);

V.4 - Horizontale et verticale


Les familiers d'AutoCad et autres logiciels de dessin souhaiteront peut-tre retrouver leur environnement favori l'intrieur d'une grille. la dclaration de sCol et sLig, ajouter cooX et cooY (avant implementation). Les coordonnes X et Y de la souris sont dtermines au sein de la procdure CoordSouris : complter son code par cooX:=X et cooY:=Y. Pour les lignes rouges, le code s'crira, en utilisant les mthodes MoveTo et LineTo :

- 25 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003 procedure TMonFormulaire.DessinGrille(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); begin With MaGrille.Canvas do begin Pen.Color:=clRed; MoveTo(0, cooY); LineTo(MaGrille.Width, cooY); MoveTo(cooX, 0); LineTo(cooX, MaGrille.Height); end; end;

V.5 - Cadre
Il reste une autre possibilit pour mettre en valeur la case survole par la souris, celle de l'entourer par un cadre. Le trac des lignes doit commencer par un angle qui aura pour coordonnes aRect.Left et aRect.Top (sommet suprieur gauche). Le premier segment sera une horizontale de longueur gale la largeur de la colonne moins deux pixels pour ne pas craser la ligne frontire, soit
- 26 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

ColWidths[sCol]-2. La premire verticale aura pour hauteur la hauteur de la ligne moins deux pixels, soit RowHeights[sLig]-2 et le trac continuera jusqu'au point de dpart. Le code s'crira donc ainsi, en reprenant les mthodes MoveTo et LineTo :
procedure TMonFormulaire.DessinGrille(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var Largeur, Hauteur : Integer; begin If (aCol=sCol) And (aRow=sLig) Then With MaGrille.Canvas do begin Pen.Color:=clRed; Largeur:=MaGrille.ColWidths[aCol]-2; Hauteur:=MaGrille.RowHeights[aRow]-2; MoveTo(aRect.Left, aRect.Top);//angle suprieur gauche LineTo(aRect.Left+Largeur, aRect.Top);//1re horizontale LineTo(aRect.Left+Largeur, aRect.Top+Hauteur);//1re verticale LineTo(aRect.Left, aRect.Top+Hauteur);//2me horizontale LineTo(aRect.Left, aRect.Top); //retour end; end;

Un appui sur F9 montre que l'objectif recherch est atteint.

- 27 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

V.6 - Bilan
Le projet permet maintenant de crer une grille de donnes et de suivre avec prcision la position de la souris en mettant en valeur la case survole, ou la ligne, ou la colonne. Il est galement possible de constituer un curseur style AutoCad, ou simplement d'encadrer la case. Dans le prochain chapitre, les diffrentes options de mise en valeur seront restructures afin de rendre leur choix accessible partir du formulaire.

VI - Mise en oeuvre des options


Le chapitre prcdent a expos les diffrentes formes que le code peut donner au curseur pour mettre en vidence la position de la souris dans une grille. Ces options peuvent tre slectionnes facilement l'aide de botes cocher.

VI.1 - Liste des options disponibles


Le projet a prsent les mthodes permettant de surligner la case survole par la souris :
- 28 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

1 2 3 4 5 6

En changeant la couleur du fond de la case ; En encadrant la case ; En changeant la couleur de toute la ligne ; En changeant la couleur de toute la colonne ; En dessinant une horizontale la hauteur de la souris ; En dessinant une verticale la hauteur de la souris.

Soit six options de base, auxquelles seront ajoutes, titre d'illustration, la mise en couleur du fond de la grille et le remplissage des cases par des nombres alatoires. Pour autoriser un choix multiple, la solution la plus simple est d'utiliser le composant CheckBox, soit huit cases cocher qui porteront les noms suivants (Caption) : 1 2 3 4 5 6 7 8 Case ; Cadre ; Ligne ; Colonne ; Horizontale ; Verticale ; Fond couleur ; Alatoire.

Avec Lazarus, glisser successivement les huit checkbox dans le formulaire, au-dessous de la grille. Modifier la proprit Caption pour donner chacun la valeur ci-dessus.

VI.2 - Curseurs
Les six premires options sont conditionnes par l'identit d'un paramtre dtect par la souris (sCol par exemple) avec le paramtre trait par la procdure OnDrawCell, aCol en l'occurence. Pour simplifier l'criture du code, on remplacera :
If (aCol=sCol) Then...

par une expression raccourcie :


If Colonne Then...

Ceci suppose que la variable Colonne soit un boolen, qui sera dclare en local, et dfinie par :
Colonne:=(aCol=sCol);

Au cours de l'excution de la procdure DessinGrille, le programme compare les deux variables aCol et sCol. Si elles sont identiques, la variable Colonne bascule sur Vrai. Sinon, elle bascule sur Faux. Avec la mme affectation pour la variable Ligne, l'ensemble des conditions qui feront apparatre un fond de couleur dans la case survole par la souris devient :
If CheckBox1.Checked And Ligne And Colonne Then...

Pour que la ligne entire soit surligne, la condition sera :


If CheckBox3.Checked And Ligne Then...

Et pour la colonne :
- 29 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

If CheckBox4.Checked And Colonne Then...

L'instruction qui suit le mot Then attribue la couleur de son choix la variable Brush.Color. Sauf imposer des couleurs diffrentes, cette instruction va se rpter trois fois. Pour l'viter, simplifier l'criture du code et gagner en dlai d'excution, il suffit d'introduire Or. Le code devient, pour les trois options :
If (CheckBox1.Checked And Ligne And Colonne) Or (CheckBox3.Checked And Ligne) Or (CheckBox4.Checked And Colonne) Then...

Pour les lignes, il est ncessaire de dfinir la couleur de Pen.Color, puis de dcider du point de dpart et de l'arrive. Avec l'option Cadre, le code s'crira :
If CheckBox2.Checked And Ligne And Colonne Then begin Largeur:=MaGrille.ColWidths[aCol]-2; Hauteur:=MaGrille.RowHeights[aRow]-2; MoveTo(aRect.Left, aRect.Top); LineTo(aRect.Left+Largeur, aRect.Top); LineTo(aRect.Left+Largeur, aRect.Top+Hauteur); LineTo(aRect.Left, aRect.Top+Hauteur); LineTo(aRect.Left, aRect.Top); end;

Avec les options Horizontale et Verticale, le code devient son tour :


If CheckBox5.Checked And Ligne Then begin MoveTo(0, cooY); LineTo(MaGrille.Width, cooY); end; If CheckBox6.Checked And Colonne Then begin MoveTo(cooX, 0); LineTo(cooX, MaGrille.Height); end;

- 30 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

VI.3 - Remplissage de la grille


Dans l'tat actuel du projet, les cases sont remplies avec leur numro, et le fond de chaque case a conserv sa couleur d'origine, l'exception des ligne et colonne fixes et des cases retenues par les options curseurs prcdentes. Les CheckBox 7 et 8 seront utilises en exploitant leur proprit OnChange : chaque changement d'tat dclenche une procdure qui ralisera l'effet recherch.

- 31 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

VI.3.A - Couleur de la grille

Dans le formulaire MonFormulaire, cliquer sur le composant CheckBox7. L'inspecteur d'objets fait apparatre ses proprits ; dans l'onglet Evnements, cliquer sur OnChange et saisir ChangeCouleur, puis appuyer sur Entrer. Dans l'diteur de source apparat la nouvelle procdure et complter le code pour alterner entre l'affichage par dfaut et la couleur de votre choix :
procedure TMonFormulaire.ChangeCouleur(Sender: TObject); begin With MaGrille do begin If Color=clWindow Then Color:=$00FEFFE6 Else Color:=clWindow; end; end;

- 32 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Le test porte sur la couleur par dfaut, clWindow. La couleur propose en change est un bleu trs ple, mais toute autre couleur claire fera l'affaire.

Pour modifier la couleur des cellules fixes, il faut utiliser la proprit FixedColor dont la valeur par dfaut est clBtnFace.

VI.3.B - Texte des cellules


Dans le formulaire MonFormulaire, cliquer sur le composant CheckBox8. L'inspecteur d'objets fait apparatre ses proprits ; dans l'onglet Evnements, cliquer sur OnChange et saisir ChangeRemplissage, puis appuyer sur Entrer. Dans l'diteur de source apparat la nouvelle procdure ; complter le code pour alterner entre l'affichage des numros et l'affichage de nombres alatoires :

- 33 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

Les affichages Caption sont modifis systmatiquement pour que l'utilisateur ait toujours un choix clair sa disposition. Le remplissage de la grille est maintenant affect une procdure spcialise. Le code initialement inscrit dans la procdure CreationGrille peut tre supprim. Mais en consquence la grille apparatra vide au dmarrage et il faudra cliquer sur Alatoire pour provoquer son remplissage.

- 34 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

VI.4 - Bilan

Le projet avait pour objectif de crer un curseur rellement pratique dans une grille ; l'objectif est maintenant atteint. Les mouvements de la souris sont suivis selon le souhait de l'utilisateur par la mise en surbrillance d'une ligne, d'une colonne, ou d'une case de six faons diffrentes. Le code exploite cinq types d'vnements diffrents et aboutit un affichage clair et stable. L'article suivant abordera les usages pratiques du composant StringGrid, avec la mise en valeur de cellules particulires, indpendamment de la position de la souris. Voici le code de l'unit EssaiGrille.pas :
unit EssaiGrille; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Fileutil, Lresources, Forms, Controls, Graphics, Dialogs, Grids, StdCtrls; type - 35 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003

{ TMonFormulaire } TMonFormulaire = class(TForm) Button1: TButton; Checkbox1: Tcheckbox; Checkbox2: Tcheckbox; Checkbox3: Tcheckbox; Checkbox4: Tcheckbox; Checkbox5: Tcheckbox; Checkbox6: Tcheckbox; Checkbox7: Tcheckbox; Checkbox8: Tcheckbox; MaGrille: TStringGrid; procedure Button1click(Sender: TObject); procedure Changecouleur(Sender: TObject); procedure Changeremplissage(Sender: TObject); procedure Coordsouris(Sender: TObject; Shift: Tshiftstate; X, Y: integer); procedure Creationformulaire(Sender: TObject); procedure Dessingrille(Sender: TObject; Acol, Arow: integer; Arect: Trect; Astate: Tgriddrawstate); private { Private Declarations } public { Public Declarations } end; var MonFormulaire: TMonFormulaire; var sCol, sLig, cooX, cooY: integer; implementation { TMonFormulaire } procedure Tmonformulaire.Button1click(Sender: TObject); begin with MaGrille do if Cells[1, 1] = '' then Cells[1, 1] := 'Bonjour' else Cells[1, 1] := ''; end;

procedure Tmonformulaire.Changecouleur(Sender: TObject); begin with MaGrille do begin if Color = clWindow then Color := $00FEFFE6 else Color := clWindow; end; end; procedure Tmonformulaire.ChangeRemplissage(Sender: TObject); var i, j: integer; begin with MaGrille do for i := 1 to ColCount - 1 do for j := 1 to RowCount - 1 do if CheckBox8.Checked then Cells[i, j] := IntToStr(i + (RowCount - 1) * (j - 1)) else Cells[i, j] := IntToStr(1 + Random(10000)); if (CheckBox8.Caption = 'Numros') then - 36 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003 CheckBox8.Caption := 'Alatoire' else CheckBox8.Caption := 'Numros'; end; procedure Tmonformulaire.Coordsouris(Sender: TObject; Shift: Tshiftstate; X, Y: integer); begin with MaGrille do begin cooX := X; cooY := Y; Cells[1, 2] := Cells[1, 3] := MouseToCell(X, Cells[0, 0] := Repaint; end; end;

'X 'Y Y, 'C

=' + IntToStr(X); =' + IntToStr(Y); sCol, sLig); ' + IntToStr(sCol) + ' - L ' + IntToStr(sLig);

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; procedure Tmonformulaire.Dessingrille(Sender: TObject; Acol, Arow: integer; Arect: Trect; Astate: Tgriddrawstate); var Largeur, Hauteur: integer; Ligne, Colonne: boolean; begin Ligne := aRow = sLig; Colonne := aCol = sCol; with MaGrille.Canvas do begin if (CheckBox1.Checked and Ligne and Colonne) or (CheckBox3.Checked and Ligne) or (CheckBox4.Checked and Colonne) then begin Brush.Color := clYellow; FillRect(aRect); end; if CheckBox2.Checked and Ligne and Colonne then begin Pen.Color := clRed; Largeur := MaGrille.ColWidths[aCol] - 2; Hauteur := MaGrille.RowHeights[aRow] - 2; MoveTo(aRect.Left, aRect.Top); //angle suprieur gauche LineTo(aRect.Left + Largeur, aRect.Top);//1re horizontale LineTo(aRect.Left + Largeur, aRect.Top + Hauteur);//1re verticale LineTo(aRect.Left, aRect.Top + Hauteur);//2me horizontale LineTo(aRect.Left, aRect.Top); //retour end; if CheckBox5.Checked and Ligne then begin Pen.Color := clRed; - 37 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid

Le StringGrid facile avec Lazarus par Dimanche2003 MoveTo(0, cooY); LineTo(MaGrille.Width, cooY); end; if CheckBox6.Checked and Colonne then begin Pen.Color := clRed; MoveTo(cooX, 0); LineTo(cooX, MaGrille.Height); end; end; end; initialization {$I EssaiGrille.lrs} end.

- 38 Copyright 2010 - Dimanche2003. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lazarus.developpez.com/cours/stringgrid