Vérication longueur Fixe sur un TEdit [Résolu]

Signaler
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
16 juin 2020
-
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
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

Messages postés
302
Date d'inscription
vendredi 21 septembre 2007
Statut
Membre
Dernière intervention
6 février 2013
1
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
Messages postés
3816
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
5 septembre 2020
34
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 ="" />
Messages postés
3816
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
5 septembre 2020
34
arf j'ai été trop lent sur ce coup là

 
@+
Cirec

<hr siz="" />
Messages postés
302
Date d'inscription
vendredi 21 septembre 2007
Statut
Membre
Dernière intervention
6 février 2013
1
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
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
16 juin 2020

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
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
31
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);
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Personne a une version assembleur ? lol

Cordialement, Bacterius !