Limiter le nb de caractere dans une stringgrid

cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 8 juin 2006 à 10:48 - Dernière réponse : cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention
- 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
Afficher la suite 
77Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention

3 réponses

Répondre au sujet
cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 8 juin 2006 à 15:52
0
Utile
j'ai résolu le problème
Commenter la réponse de cs_philpas
MathU Zalem 12 Messages postés samedi 4 décembre 2004Date d'inscription 9 juin 2006 Dernière intervention - 8 juin 2006 à 15:58
0
Utile
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
Commenter la réponse de MathU Zalem
cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 9 juin 2006 à 08:41
0
Utile
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+
Commenter la réponse de cs_philpas

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.