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

cs_eli42 116 Messages postés mardi 24 décembre 2002Date d'inscription 30 juillet 2018 Dernière intervention - 13 juin 2009 à 10:15 - Dernière réponse : Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention
- 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
//-----------------------------------------------
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
L_art_ment 316 Messages postés vendredi 21 septembre 2007Date d'inscription 6 février 2013 Dernière intervention - 13 juin 2009 à 10:48
3
Merci
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

Merci L_art_ment 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de L_art_ment
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 13 juin 2009 à 10:56
3
Merci
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 ="" />

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 13 juin 2009 à 10:57
3
Merci
arf j'ai été trop lent sur ce coup là

 
@+
Cirec

<hr siz="" />

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
L_art_ment 316 Messages postés vendredi 21 septembre 2007Date d'inscription 6 février 2013 Dernière intervention - 13 juin 2009 à 11:05
3
Merci
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

Merci L_art_ment 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de L_art_ment
Meilleure réponse
cs_eli42 116 Messages postés mardi 24 décembre 2002Date d'inscription 30 juillet 2018 Dernière intervention - 13 juin 2009 à 11:56
3
Merci
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

Merci cs_eli42 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_eli42
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 13 juin 2009 à 16:47
3
Merci
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);

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 14 juin 2009 à 19:51
3
Merci
Personne a une version assembleur ? lol

Cordialement, Bacterius !

Merci Bacterius 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Bacterius

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.