Controle saisie (edit) [Résolu]

zorro4243 3 Messages postés lundi 2 novembre 2009Date d'inscription 3 novembre 2009 Dernière intervention - 17 avril 2008 à 09:57 - Dernière réponse : HAFTARIFOUAD 298 Messages postés mercredi 5 septembre 2007Date d'inscription 6 janvier 2011 Dernière intervention
- 18 avril 2008 à 15:24
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.
Afficher la suite 

7 réponses

Répondre au sujet
HAFTARIFOUAD 298 Messages postés mercredi 5 septembre 2007Date d'inscription 6 janvier 2011 Dernière intervention - 17 avril 2008 à 10:13
+3
Utile
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;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de HAFTARIFOUAD
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 17 avril 2008 à 11:08
+3
Utile
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="" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
HAFTARIFOUAD 298 Messages postés mercredi 5 septembre 2007Date d'inscription 6 janvier 2011 Dernière intervention - 17 avril 2008 à 18:22
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de HAFTARIFOUAD
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 18 avril 2008 à 00:28
+3
Utile
Oui ça fonctionne sans la petite erreur 

if ((ssCtrl in Shift) AND (Key = ord('V'))) then
  begin
    if Clipboard.HasFormat(CF_TEXT) then ClipBoard.Clear;
    Key := 0 ;
  end;

Mais si c'est pour controler le tout il y avait ceci :
http://www.delphifr.com/codes/CONTROLER-COPIER-COLLER-DANS-TEDIT_40313.aspx

Avantage:
Le controle du presse papier (ClipBoard) est totale ... on peut interdir ou non
soit le copier soit le coller soit les deux
on peut controler ce qui va être coller (le modifier juste avant) sans modifier le contenu du press papier.

et encore plein d'autres choses

 
@+
Cirec

<hr siz ="" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
zorro4243 3 Messages postés lundi 2 novembre 2009Date d'inscription 3 novembre 2009 Dernière intervention - 18 avril 2008 à 15:18
0
Utile
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
Commenter la réponse de zorro4243
HAFTARIFOUAD 298 Messages postés mercredi 5 septembre 2007Date d'inscription 6 janvier 2011 Dernière intervention - 18 avril 2008 à 15:24
-1
Utile
Merci à vous aussi Mr: ZORRO4243, et bonne chance.
Commenter la réponse de HAFTARIFOUAD
HAFTARIFOUAD 298 Messages postés mercredi 5 septembre 2007Date d'inscription 6 janvier 2011 Dernière intervention - 17 avril 2008 à 10:12
-2
Utile
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.
Commenter la réponse de HAFTARIFOUAD

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.