[..] Interdire des caractères dans un Input Box

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Dixit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 16 mars 2011 13:14
Status : Hors ligne

[..] Interdire des caractères dans un Input Box

#1

Message par Dixit »

Bonsoir

J'aimerais savoir s'il y avait une astuce permettant avec un InputBox classique d'interdire certains caractères ou du moins signaler à l'utilisateur qu'il a utilisé un caractère interdit pour qu'il puisse retaper. Il y en a bien une qui est du bricolage en mettant un hotkeyset de la touche pour la rendre inutilisable mais bon il doit y avoir mieux... Ou alors est-on obligé de passer par une GUI ?

En l'occurrence je voudrais interdire le slash "/".
Modifié en dernier par Dixit le jeu. 31 mars 2011 11:30, modifié 4 fois.
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#2

Message par Yogui »

Bonsoir

Code : Tout sélectionner

$toto = InputBox('toto', 'toto')

$res = StringInStr($toto, '/')

If $res = 0 Then
    MsgBox(0, 'Alors ?', 'pas de / dans la saisie')
Else
    MsgBox(0, 'Alors ?', 'Présence du caractère interdit')
EndIf
Mais c'est une vérification après coup ... pour vérifier au fur et à mesure de la saisie oui je pense qu'il faut passer par une GUI ou hotkeyset...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#3

Message par Tlem »

Le plus simple, sera de surveiller ce qui ce passe dans cette InputBox et de vérifier au fur et à mesure que le caractère entré ne soit pas celui/ceux interdits. ;)

Vous trouverez un exemple ici : http://www.autoitscript.fr/forum/viewto ... 950#p37950
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Dixit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 16 mars 2011 13:14
Status : Hors ligne

Re: [R] Interdire des caractères dans un Input Box

#4

Message par Dixit »

Merci bien! :)
Dixit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 16 mars 2011 13:14
Status : Hors ligne

Re: [R] Interdire des caractères dans un Input Box

#5

Message par Dixit »

J'ai un autre problème maintenant en ce qui concerne la virgule donc je rouvre le sujet. Le programme marche très bien en ce qui concerne les caractère alphanumériques, ainsi que le slash et l'antislash, mais avec la virgule il semble y avoir un problème...

Code : Tout sélectionner

$rep=InputBox("Ecrivez","")
$result = StringInStr($rep, ',')
If $result = 1 Then
    MsgBox(0,"NON","Une virgule a été mise")
Else
    MsgBox(0,"OUI","Pas de virgules")
Endif
En effet, rentrez juste une virgule dans l'Input et il dira qu'il y en à une. Par contre rentrez par exemple " 7,5 " et il dira qu'il n'y a pas de virgule... Ou est le problème SVP ?
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#6

Message par sksbir »

Bonjour

Piste probable : 7,5, c'est un chiffre. Essaye $result = StringInStr(string($rep), ',')
Dixit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 16 mars 2011 13:14
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#7

Message par Dixit »

Non il ne trouve toujours pas de virgules avec cette méthode.
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#8

Message par sksbir »

mm, c'est plus simple que ça...

stringinstr ne renvoie pas 1 ou 0, mais la position de la virgule. Regarde plutôt:

Code : Tout sélectionner

$rep=InputBox("Ecrivez","")
$result = StringInStr($rep, ',')
If $result = 1 Then
    MsgBox(0,"NON","Une virgule a été mise:" & $result)
Else
    MsgBox(0,"OUI","Pas de virgules:" &  $result)
Endif
A revoir : $result=1 , à remplacer par "if $result" tout simplement...
Dixit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 16 mars 2011 13:14
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#9

Message par Dixit »

Ah d'accord merci ^^
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#10

Message par Tlem »

Pourtant, il m'avais semblé que le lien donné dans mon message précédent, était relativement clair ...
Tlem a écrit :Vous trouverez un exemple ici : http://www.autoitscript.fr/forum/viewto ... 950#p37950
Mais sans doute qu'avec un code tout fait, cela sera plus parlant ... :roll:
► Afficher le texte
Vous constaterez que par rapport au message d'origine, la différence est minime. :P
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Dixit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 16 mars 2011 13:14
Status : Hors ligne

Re: [R] Interdire des caractères dans un Input Box

#11

Message par Dixit »

En fait je ne l'avais malheureusement pas regardé car le fait d'avertir simplement l'utilisateur me suffisait ^^ Mais oui je comprends :p Je trouve juste étonnant qu'on soit obligé de donner manuellement les caractères interdits. Enfin qu'il n'y ai pas une option genre ",1"> Que les lettres, ",2" > Que les nombres, etc. M'enfin c'est pas la mort non plus... Problème résolu merci!
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#12

Message par zeshrek »

Alors si, il est possible de lui dire 'que des lettres ou que des chiffres, ou toute combinaison de xchiffres/lettres/signes.
Pour cela il faut simplement s'ammuser avec les expressions régulières pour tester la validité de ce qui est saisi. Tu as par exemple eu pas plus tard que ce matin un superbe exemple de la part de ZDS pour les plages d'adresses IP...
Si vis pacem para bellum
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#13

Message par legend »

J'ai pas lu tout mais je propose aussi cela (il est visible a l'utilisateur que les "/" ne seront pas acceptés)

Code : Tout sélectionner

Global $1, $2
AdlibRegister ("lol", 200)
GUICreate ("")
$input = GUICtrlCreateInput ("", 0, 0, 200, 50)
GUISetState ()
sleep (10000)
Func lol()
    $1 = GUICtrlRead ($input)
    $2 = StringReplace ($1, "/", "")
    GUICtrlSetData ($input, $2)
    EndFunc
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#14

Message par ZDS »

Argh, une routine qui veux travailler indirectement sur de l'interne en passant par l'interface externe !!! :evil: C'est comme si tu allais à poil de ta chambre à la salle de bain en passant par le jardin ! Désolé Legend, mais un truc pareil c'est à proscrire, et à bannir ou brûler en dansant autour pour empêcher de tels mauvaises manies de revenir d'outre-tombe ^^.

Selon moi, la seule véritable façon propre de faire est par GUIRegisterMsg (proposée par Tlem), elle permet surtout une utilisation en live un peu comme un "notify observer" Java. Le reste, même par regexp, ne teste la validité qu'à posteriori (et je suis pour le "mieux vaut prévenir que guérir").

Mais bon, rien n'empêche de mettre une regexp dans le test effectué dans le bloc "Case $EN_CHANGE"
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Interdire des caractères dans un Input Box

#15

Message par Tlem »

@Dixit
Le fait d'interdire que les lettres, les chiffres, les caractères spéciaux, ou un mélange des trois, peut ce faire d'une autre manière qu'une simple RegExp dont la maitrise est aléatoire et qui n'est pas forcément la solution la plus compréhensible lors de la relecture ou modification du code ultérieurement.

Pour cela, créez trois variables (ou plus selon votre convenance) contenant chacune le groupe de caractère que vous souhaitez interdire.
Voici par exemple pour les chiffres et pour les lettres (vous pouvez rajouter aussi les lettres spéciales tel que le â, le à, etc ... ou créer un groupe spécifique) :
► Afficher le texte
Ensuite, créez votre algorithme de sélection des groupes.
Par exemple :
  • 1 = que les chiffres
    2 = que les lettres
    3 = chiffres + lettres
    4 = que les caractères spéciaux
    5 = chiffres + caractères spéciaux
    6 = lettres + caractères spéciaux
    7 = chiffres + lettres + caractères spéciaux
Il existe déjà sur le forum un code de ce style (sur la génération de mot de passe me semble t'il ...)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre