Validation des cellules d'un stringgrid ??

Résolu
Excalibur_56 Messages postés 42 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 18 avril 2024 - 29 sept. 2019 à 16:55
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 - 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

1 réponse

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
Modifié le 4 oct. 2019 à 17:39
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
--
0
Excalibur_56 Messages postés 42 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 18 avril 2024
4 oct. 2019 à 20:53
Bonsoir Japee;
Merci pour ta réponse, super sympa.
Cordialement
0
Excalibur_56 Messages postés 42 Date d'inscription jeudi 14 février 2019 Statut Membre Dernière intervention 18 avril 2024
Modifié le 5 oct. 2019 à 10:25
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.
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 oct. 2019 à 14:32
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;
0
Rejoignez-nous