Validation des cellules d'un stringgrid ??

Messages postés
14
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
4 octobre 2019
- - Dernière réponse : japee
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
- 5 oct. 2019 à 14:32
Bonjour à tous,

Comment faire pour valider mes cellules de mon StringGrid selon le texte saisi ?;
Si le texte de la cellule 1,1 n'est pas correct, j'aimerais que la cellule soit :
Font.style:= [fsStrikeOut]; Uniquement la cellule et non tout le stringgrid

En vous remerciant d'avance,
Cordialement
Afficher la suite 

1 réponse

Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
2
0
Merci
Salut,

Dans l'évènement OnDrawCell du StringGrid, tu mets ce code :
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  CellText: string;
begin
  with  StringGrid1.Canvas do
  begin
    CellText := TStringGrid(Sender).Cells[Acol, ARow];
    if TextIsValid(CellText) then  // ton test de validité du contenu de la cellule
      Font.Style := [fsStrikeOut]
    else
      Font.Style := [];
    TextOut(Rect.Left + 2, Rect.Top + 2, CellText);
  end;
end;


et tu appelles l'évènement Repaint de la StringGrid à chaque fois qu'une cellule est modifiée, ainsi :
StringGrid1.Repaint;


Cordialement
--
Excalibur_56
Messages postés
14
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
4 octobre 2019
-
Bonsoir Japee;
Merci pour ta réponse, super sympa.
Cordialement
Excalibur_56
Messages postés
14
Date d'inscription
jeudi 14 février 2019
Statut
Membre
Dernière intervention
4 octobre 2019
-
bonsoir Japee;
je viens d'essayer, j'aurais pas dû définir de cellule dans ma question.
c'est pas tout à fait ce que je recherche, car chaque cellule est différente. Voici le code d'essais.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  CellText, TextIsValid: string;
begin
TextIsValid:= ' Mon Texte'; // <= c'est pas ce que j'aimerais
  with  StringGrid1.Canvas do
  begin
   CellText := TStringGrid(Sender).Cells[Acol, ARow];
    if (TextIsValid<>(CellText)) then  // ton test de validité du contenu de la cellule
      Font.Style := [fsStrikeOut]
    else
     Font.Style := [];
    TextOut(Rect.Left + 2, Rect.Top + 2, CellText);
  end;
end;

procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
  var Value: string);
begin
  StringGrid1.Repaint;
end;

Voilà ce que je voudrais, dans mon stringgrid, je voudrais saisir les verbes irréguliers en anglais cellules de la colonne 1 les verbes à l'infinitif, puis, saisir les réponses dans les autre cellules de la même ligne.
colonne(1)= Infinitif colonne(2)= Prétérit colonne(3)=Participe passé colonne(4)=Traduction
donc, saisir les réponses dans les colonnes 2,3, et les barrer en rouge si les réponses sont fausses.
Je pense, qu'il va falloir, valider les réponses avec un bouton et des conditions
if then je ne pense pas pouvoir barrer les cellules dont les réponses seront fausses.
Font.Style := [fsStrikeOut], 
ça le fait pour tout le stringgrid
Merci , de m'avoir aidé, en tout cas, c'est sympa
cordialement
désolé pour ma question mal posée.
japee
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
2 -
Salut,
J'avais bien compris ta question.
Mais je crois que tu n'as pas compris le code que je te propose.
Dès qu'une réponse est entrée dans la StringGrid, tu appelles l'évènement Repaint qui va redessiner les cellules de ta StringGrid.
Les cellules sont toutes redessinées dans l'évènement DrawCell. La validité du contenu est vérifiée cellule par cellule dans la condition que j'ai appellé "TextIsValid" (c'est à toi de définir ce test) : si le contenu (string) est incorrect, le texte sera barré, si c'est correct, la cellule sera redessinée avec la police standard.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  CellText: string;
begin
  with  StringGrid1.Canvas do
  begin
    CellText := TStringGrid(Sender).Cells[Acol, ARow];
    if...then *
 { * tu testes ici la validité du string, ACol et ARow sont les coordonnées
de la cellule, tu as récupéré son contenu dans CellText, à comparer avec
un tableau des réponses correctes que tu as préalablement établi }
      Font.Style := [fsStrikeOut]
    else {sinon les cellules sont redessinées normalement, texte non barré}
      Font.Style := [];
    TextOut(Rect.Left + 2, Rect.Top + 2, CellText);
  end;
end;
Commenter la réponse de japee