Vérication longueur Fixe sur un TEdit

Résolu
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 - 13 juin 2009 à 10:15
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 14 juin 2009 à 19:51
Bonjour,
Voila j'ai une appli avec 95 Edit, vu que dans les propriété pas possible de fixer une longueur maxi, j'ai fait une procedure avec un case, tous les TEdit ont le Tag Correspondant à leur Taille Shouhaité, j'ai bidouiller pour ne pas taper WattMille lignes.
 Il y aurait pas un truc plus pro???

Ces EDit sont déstiné à alimenter une Base de Donnée Interbase, Vous me direz pourquoi ne pas utiliser un TDEdit qui lui associé à un Champ de la base bloquera, mais alors ou serait l'intéret de la recherche?

* Nota pour que ce soit un minimun lisible j'ai renommer les Compo

je l'appelle ainsi :

 Dans le KeyPress
VERIF_EDIT_LONGUEUR(Tedit(Sender).Tag, Tedit(Sender).Name);

Procedure TForm1.VERIF_EDIT_LONGUEUR(LONGUEUR: Integer; NOM: String);
Var nonEDIT: Tedit;
 Msg: String;
Begin
 With Form1 Do
 Begin
// le Tag du EDIT doit Correspondre à la longueur Maxi
// Recupération du nom de l'Edit via variable NOM pour comparaison et Formatage
  nonEDIT := Tedit(Findcomponent(NOM));
// Message pour le Showmessage
  Msg := 'Saisie Trop Longue';
//------------------------------------------------------------------------------
  Case LONGUEUR Of
//------------------------------------------------------------------------------
// Vérification si dépassement Edit > Case = Trop Long
   2: If Length(nonEDIT.txt) > 2 Then
    Begin

    //Avertissement si dépasse le Tag
     ShowMessage(Msg); 

     // Reformate Edit à la Bonne Taille 
     nonEDIT.text := Copy(nonEDIT, 0, 2);

     //Curseur Fin de chaine
     nonEDIT.Selstart := 2;
    End;
//------------------------------------------------------------------------------
   5: If Length(nonEDIT.txt) > 5 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 5); nonEDIT.Selstart := 5;
    End;
//------------------------------------------------------------------------------
   8: If Length(nonEDIT.txt) > 8 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 8); nonEDIT.Selstart := 8;
    End;
//------------------------------------------------------------------------------
   10: If Length(nonEDIT.txt) > 10 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 10); nonEDIT.Selstart := 10;
    End;
//------------------------------------------------------------------------------
   11: If Length(nonEDIT.txt) > 11 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 11); nonEDIT.Selstart := 11;
    End;
//------------------------------------------------------------------------------
   15: If Length(nonEDIT.txt) > 15 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 15); nonEDIT.Selstart := 15;
    End;
//------------------------------------------------------------------------------
   30: If Length(nonEDIT.txt) > 30 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 30); nonEDIT.Selstart := 30;
    End;
//------------------------------------------------------------------------------
   40: If Length(nonEDIT.txt) > 40 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 40); nonEDIT.Selstart := 40;
    End;
//------------------------------------------------------------------------------
   50: If Length(nonEDIT.txt) > 50 Then
    Begin
     ShowMessage(Msg); nonEDIT.text := Copy(nonEDIT, 0, 50); nonEDIT.Selstart := 50;
    End;
//------------------------------------------------------------------------------
  End;   // Fin CASE
//------------------------------------------------------------------------------
 End;   // Fin With
//------------------------------------------------------------------------------
End;

//-----------------------------------------------
Bonne Prog à Tous Or Bonne Prog à Toutes
//-----------------------------------------------

7 réponses

L_art_ment Messages postés 302 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 6 février 2013
13 juin 2009 à 10:48
Bonjour,
"vu que dans les propriété pas possible de fixer une longueur maxi" -> à quoi sert la propriété MaxLength alors ?

<hr />
L'Armand joue, l'arme en joug... www.art-ment.com
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 juin 2009 à 10:56
Salut,
1°) il existe la propriété MaxLength pour les TEdit

Sinon pour répondre à ta question d'optimisation ... plutôt que de mettre ce contrôle (teste) dans l'évènement "OnKeyPress", qui sera exécuté à chaque touche appuyé, on peut le placer dans "OnExit" qui se déclenche lorsque que le composant perd le focus :

  Private
    {
Déclarations privées }
    Procedure
VERIF_EDIT_LONGUEUR(Const aEdit:
TEdit);
  Public
    { Déclarations publiques }
  End;

Var

  Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.Edit1Exit(Sender: TObject);

Begin
  If (Sender Is TEdit) Then

   VERIF_EDIT_LONGUEUR(Sender As
TEdit);
End;

Procedure TForm1.VERIF_EDIT_LONGUEUR(Const aEdit: TEdit);
Var
Msg: String;
Begin
// Message pour le
Showmessage
  Msg := 'Saisie Trop Longue pour
le contrôle %s'#13#13#10+
         'Un maximum de
%d caractères sont autorisés';

//
Vérification si dépassement Edit > Case = Trop Long
    If Length(aEdit.text) > aEdit.Tag Then
    Begin

     //Avertissement si dépasse le Tag
     ShowMessageFmt(Msg, [aEdit.Name, aEdit.Tag]);

     // Reformate Edit à la Bonne Taille
     aEdit.text : = Copy(aEdit.Text, 1,
aEdit.Tag);

     //Curseur Fin de
chaine
     aEdit.SetFocus;
     aEdit.Selstart := aEdit.Tag;

     End ;
End;

et c'est tout

mais comme dit plus haut la propriété MaxLength existe donc ...

 
@+
Cirec

<hr siz ="" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 juin 2009 à 10:57
arf j'ai été trop lent sur ce coup là

 
@+
Cirec

<hr siz="" />
3
L_art_ment Messages postés 302 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 6 février 2013
13 juin 2009 à 11:05
J'savais que j'allais me pas tarder à me faire devancer dans ma réponse et pour une fois que j'ai la réponse à une question sur le forum je me suis dépéché...  :D

<hr />
L'Armand joue, l'arme en joug... www.art-ment.com
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
13 juin 2009 à 11:56
Bonjour,


Je crois que je vais me mettre à la console, pas foutu de voir la propriete "MaxLength" est ce grave Doc.
Ca fera toujours une procedure en moins, merci a tous les deux de m'avoir ouvert les yeux.

Bonne Prog
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
13 juin 2009 à 16:47
si tu ne la vois vraiment pas :

procedure SetMaxLength(Edit: TEdit; const MaxLength: integer);
begin
SendMessage(Edit.Handle, EM_LIMITTEXT, MaxLength, 0);
end;


SetMaxLength(Edit1, 5);
SetMaxLength(Edit2, 8);
SetMaxLength(Edit3, 3);
3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 juin 2009 à 19:51
Personne a une version assembleur ? lol

Cordialement, Bacterius !
3
Rejoignez-nous