Controle saisie (edit) [Résolu]

Signaler
Messages postés
3
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
3 novembre 2009
-
Messages postés
256
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
6 janvier 2011
-
Je ne trouve pas de solution au problème suivant, simple et fréquent de surcoit !

Dans un evenement 'on KeyPress', je souhaite contrôler et surtout MODIFIER après détection d'erreur l'entrée de quatre chiffres quelconques. J'ai trouvé sur le site la possibilité suivante: simple et sympathique mais malheureusement incomplète pour mon usage.. Comment la modifier pour permettre la correction d'un ou plusieurs chiffres erronement entrés ...Débutant Delphi, je me casse les dents .......

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ((key<'0') OR (key>'9')) then
begin
edit1.ReadOnly:=true;
ShowMessage('Corriger et entrez un chiffre');
end
else
edit1.ReadOnly:=false;
end;

Merci d'avance pour vos réponses.

6 réponses

Messages postés
256
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
6 janvier 2011

Voila je vous rajoute ce code, il a la même utilité que l'autre;


if not (key in ['0'..'9',#8]) then key:=#0;
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
Salut,

la solution de Fouad est bonne mais incomplète ...

En effet si l'utilisateur colle du texte depuis le presse papier (par ex) ben ...
cette méthode ne sert à rien

Pour toi la meilleur solution c'est de faire comme ceci :
(tu places ce code dans le OnCreate de ta fiche)

SetWindowLongA(Edit1.Handle, GWL_STYLE,  GetWindowLongA(Edit1.Handle, GWL_STYLE) or ES_NUMBER);

et c'est tout.
L'avantage est qu'il n'y a pas besoin de code supplémentaire le controle est total.

Petit plus ... si tu ajoutes un TXPManifest sur ta fiche l'utilisateur aura droit à une bulle d'information lui indiquant qu'il ne peut saisir qu'un nombre dans ce champ ... le tout avec ce simple code ... elle est pas belle la vie

 
@+
Cirec

<hr siz="" />
Messages postés
256
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
6 janvier 2011

Merci Mr CIREC pour le complément, voila je rajoute un autre code qui permet de bloquer l'utilisation des racourcis clavier Ctrl+C, Ctrl+V voila le code


procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState) ;
begin
  if ((ssCtrl in Shift) AND (Key = ord('V'))) then
  begin
    if Clipboard.HasFormat(CF_TEXT) then ClipBoard.Clear;
    Key := #0;
  end;
end;

Je pense que c'est claire, bonne chance et plein de succès  tous.
Messages postés
3
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
3 novembre 2009

Merci fouad ! Tu as répondu parfaitement à mon problème !
Tout est nickel.... Ce qui me renverse c'est la simplicité et l'évidence de ta réponse. J'ai cherché une solution compliquée alors que.... Encore merci !
J'espére un jour être a même d'aider d'autres débutants.

Marci a cirec, mais je n'ai pas encore les capacités pour bien comprendre le code employé tels que GWL_ et autres TXPManifest.

Quels sites (ou bouquins) me conseillez vous, et fouad et cirec, pour parfaire ma compréhention.

Encore merci tous les deux
Messages postés
256
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
6 janvier 2011

Merci à vous aussi Mr: ZORRO4243, et bonne chance.
Messages postés
256
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
6 janvier 2011

Bonjour

On premier je tiens a vous souhaiter la bienvenue dans le monde de la programmation :-)
Ce que j'ai compri de votre question, c'est que vous souhaiter filtrer la saisie das un TEdit pour avoir que des integer.
voila le code:

if key in ['0'..'9',#8] then key:=key else key:=#0; // #8= la touche effacer, elle est acceptée

je pense que c'est claire, bonne chance et bon courage.