cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention 4 septembre 2008
-
8 juin 2006 à 10:48
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDerniè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?
MathU Zalem
Messages postés12Date d'inscriptionsamedi 4 décembre 2004StatutMembreDerniè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;
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDerniè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;