Limiter le nb de caractere dans une stringgrid

cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 8 juin 2006 à 10:48
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 9 juin 2006 à 08:41
bonjour, j'ai un problème que je n'arrive pas à solutionner. Sur un stringgrid je voudrais limiter la saisie dans les cellules à des caractères numériques et la longueur du texte ne dépassant pas 5 caractères. Je m'explique. Dans une cellule stringgrid, l'opérateur ne doit pouvoir saisir que des nombres de 0 à 9. Lorsque la longueur du texte arrive au maximum à 5, l'opérateur ne doit pas pouvoir saisir d'autre nombre. Il doit seulement pouvoir faire entrée pour valider sa saisie.
j'ai fait ceci

procedure TFiche_Gamme_Vitesse.StringGrid1_GammeKeyPress(Sender: TObject; var Key: Char);
begin
  if Key in #13,#8,'0'..'9' then  // #13=Return #8=Retour arrière
  begin
    if (Length(StringGrid1_Gamme.Cells[StringGrid1_Gamme.Selection.left,StringGrid1_Gamme.Selection.Top])>4) and (Key<>#13) and (Key<>#8) then Key:=#0;
  end else
  begin
    Key:=#0;
    StringGrid1_Gamme.EditorMode:=False;
  end;

ceci fonctionne, je limite la saisie au caractère numérique et je limite le nb de caractère saisie à 5 mais lorsque la cellule contient déjà le nb maxi de caractère (5), je ne peux pas saisir une nouvelle valeur sans d'abord supprimer le contenu de la cellule. Tandis que si la cellule contient au maximum 4 caractères, je peux ressaisir une nouvelle valeur sans problème sans devoir supprimer d'abord le contenu de la cellule. Cela se fait tout seul. Y a t-il un moyen de résoudre ce problème?

Merci

3 réponses

cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
8 juin 2006 à 15:52
j'ai résolu le problème
0
MathU Zalem Messages postés 12 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 9 juin 2006
8 juin 2006 à 15:58
Salut,


Je ne suis pas sûr d'avoir bien compris ce que tu veut faire, mais à tout hasard, tu peux essayer quelque chose comme ça :

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key= #8 then exit;  //  tout le monde peut se tromper!
 with StringGrid1, StringGrid1.Selection do
  if Key =#13 then begin
      { Traitement (j'ai supposé que CR voulait dire Ok, Bon à traiter...) }
      Cells[Left, Top]:= '';
    end
  else if   (Length(Cells[Left, Top])>4)
       OR  NOT (Key in ['0'..'9'])
  then Key : = #0;
end;

Bonne Prog @+

MathUZalem
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
9 juin 2006 à 08:41
j'ai essayé ton code comme le tient était plus court. Mais ça marche pas. Cela limite bien le nb de caractère saisi à 5, que les chiffres autorisé mais lorsque je fais entrée, le texte s'éfface. Voici ce que moi j'ai écrit et qui fonctionne

procedure TFiche_Gamme_Vitesse.StringGrid1_GammeKeyPress(Sender: TObject; var Key: Char);
begin
  if Key in #13,#8,'0'..'9' then  // #13=Return #8=Retour arrière
  begin
    if (Length(StringGrid1_Gamme.Cells[StringGrid1_Gamme.Selection.left,StringGrid1_Gamme.Selection.Top])>4) then // 5 caractères Maxi
    begin
      if goAlwaysShowEditor in StringGrid1_Gamme.Options then
      begin
        if (Key<>#13) and (Key<>#8) then Key:=#0;
      end else
      begin
        if Key<>#13 then StringGrid1_Gamme.Cells[StringGrid1_Gamme.Selection.left,StringGrid1_Gamme.Selection.Top]:=Key;
      end;
    end;
    if Key=#13 then StringGrid1_Gamme.Options:=StringGrid1_Gamme.Options-[goAlwaysShowEditor]
               else StringGrid1_Gamme.Options:=StringGrid1_Gamme.Options+[goAlwaysShowEditor];
  end else
  begin
    Key:=#0;
    StringGrid1_Gamme.EditorMode:=False;
  end;

voilà
A+
0
Rejoignez-nous