Stringgrid + couleur

Résolu
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004 - 28 sept. 2004 à 08:17
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004 - 30 sept. 2004 à 10:47
Bonjour tout le monde,

voilà j'ai un chtit problème pour mon projet. J'utilise un TStringGrid et j'ai pas mal de cases avec une seule lettre par case.
J'aimerais que quand l'utilisateur clique sur une case, la couleur de la police change MAIS ATTENTION ! Pas que la couleur change juste sur la case cliquée mais qu'elle change et qu'elle reste jusqu'à ce que le projet s'arrête...
J'ai trouvé comment faire pour que la couleur change juste sur la case cliquée mais je ne sais pas comment faire pour que la couleur reste changée tout le temps...

Voilà j'espère que vous pourrez m'aider...
En attendant bonne prog ! @+

18 réponses

Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
28 sept. 2004 à 10:21
voici le code :

  public
    { Déclarations publiques }
    bCellule : array of array of boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  iNoCol : integer;
  iNoRow : integer;
begin
  // Dimentionnement et Initialisation du Tableau;
  SetLength(bCellule,StringGrid1.ColCount);

  for iNoCol := 0 to High(bCellule) do
    SetLength(bCellule[iNoCol],StringGrid1.RowCount);

  for iNoCol := 0 to High(bCellule) do
  begin
    for iNoRow := 0 to High(bCellule[iNoCol]) do
      bCellule[iNoCol][iNoRow] := False;
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  // Mémorise la cellule cliquer
  bCellule[ACol][ARow] := True;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  // Dessine avec la couleur selectionné
  if (ACol > 0) and (ARow > 0) then
  begin
    if bCellule[ACol][ARow] = True then
      StringGrid1.Canvas.Brush.Color := clBlue
    else
      StringGrid1.Canvas.Brush.Color := clWhite;

    StringGrid1.Canvas.TextRect(Rect,2,2,StringGrid1.Cells[ACol,ARow]);
  end;
end;


Bonne Prog,

Olivier
3
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
28 sept. 2004 à 09:15
salut,

il faut que tu mémorises les cellules sur lequels tu as déjà cliqué et tu les redessine à chaque fois.

Bonne Prog,

Olivier
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
28 sept. 2004 à 09:21
Merci...

Et t'as pas un petit exemple ??
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
28 sept. 2004 à 10:34
Merci beaucoup !

J'ai encore quelques petits prblèmes d'affichage mais je vais essayer d'analyser ton code pis de me démmerder tout seul...

Merci ! Bye...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
28 sept. 2004 à 10:55
J'ai encore quelques problèmes paske j'ai pas mis de FixedCols et de FixedRows. Donc ca prend pas en compte la 1ère colonne et la 1ère ligne...
Sinon a part ca, faut que je modifie juste la police mais ca y a qu'un mot a modifier...
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
28 sept. 2004 à 11:13
il faut que tu enlève la condition :
if (ACol > 0) and (ARow > 0) then

de la procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

pour modifier la police :
 StringGrid1.Font.Name := 'Nom ta Font'; 


Bonne Prog,

Olivier.
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
28 sept. 2004 à 11:22
Ouais en fait, c'est pas le nom de la police mais c'est la couleur.
Au lieu de : StringGrid1.Canvas.Brush.Color, faut que je mette StringGrid1.Canvas.Font.Color non ?
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
28 sept. 2004 à 11:32
c'est ça ;)
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
28 sept. 2004 à 13:05
J'ai encore un tit prob...

Le truc, y m'affiche seulement la case en haut à gauche et après, plus rien...

C'est pas ca :
StringGrid1.Canvas.TextRect(Rect,2,2,StringGrid1.Cells[ACol,ARow]);
qui pose problème ??
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
28 sept. 2004 à 14:59
Cette ligne de code fonctionne bien, je l'ai testé.
Comment as-tu procedé ? as-tu repris texto, mon code ?

Olivier
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
28 sept. 2004 à 15:08
Ouais j'ai repris exactement ce que tu m'as mis.
Et si je met la ligne en commentaire, ca fonctionne. Enfin ca change pas la couleur mais toutes mes cases se remplissent...
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
28 sept. 2004 à 15:38
Qu'affiche tu dans tes cellules et de quelle manière ?
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
28 sept. 2004 à 15:39
Ben j'affiche une lettre.
Et pour tester, j'ai mis un bouton et quant je clique dessus, il met le texte dans les cellules (Stringgrid.cells[x,x] := 'x';)...
Faut que je mette ca quelque part d'autre ?
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
28 sept. 2004 à 16:12
ça y est j'ai compris ce que tu voulais me dire ;)
Il y a bien un problème dans la ligne de code que tu mentionnais !

il faut mettre :
  StringGrid1.Canvas.TextRect(Rect,Rect.Left + 2,Rect.Top + 2,StringGrid1.Cells[ACol,ARow]);


Olivier
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
29 sept. 2004 à 16:59
Encore une question :

Tu peux pas modifier la couleur de la police d'une case rien qu'en lancant qqch dans une fonction ??

Par exemple : quand je clique sur un bouton, faire comme si j'avais cliqué dans une case de mon StringGrid ?

Je pourrais faire comme ca mais je sais pas quoi passer comme paramètres :

StringGrid1Click(param, param, ...);
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
29 sept. 2004 à 18:51
dans ton bouton sur l'evenement Onclick, il te suffit de mettre :

bCellule[X][Y] := True;
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
30 sept. 2004 à 10:24
Et si je veux que le StringGrid se réactualise c'est quoi la ligne de code ?

Paske quand je clique sur mon bouton, ca met la valeur du tableau à True mais ca réactualise pas le StringGrid.
0
swiss_cheese10 Messages postés 55 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 30 septembre 2004
30 sept. 2004 à 10:47
C'est bon j'ai trouvé pour ca !

C'était StringGrid.Refresh. Je savais qui avait un Refresh !
0
Rejoignez-nous