OVH Cloud OVH Cloud

Combo avec saisie

7 réponses
Avatar
borntoride
Bonjour !

Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
combo, mais que l'utilisateur ne puisse pas entr=E9e au clavier autre
chose que ce qu'il y a dans la liste ?

Merci !

Jonathan

7 réponses

Avatar
nwjb
Le Mon, 14 Aug 2006 01:28:15 +0200, borntoride a
écrit:

Bonjour !

Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
combo, mais que l'utilisateur ne puisse pas entrée au clavier autre
chose que ce qu'il y a dans la liste ?

Merci !

Jonathan



Cela parait contradictoire non ?


--
J.Bratières

Enlever paspub pour répondre
Please remove paspub when answering
Avatar
Gilles TOURREAU
Le 14/08/2006, borntoride a supposé :
Bonjour !

Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
combo, mais que l'utilisateur ne puisse pas entrée au clavier autre
chose que ce qu'il y a dans la liste ?

Merci !

Jonathan



2 solutions :
La première (plus simple à réaliser) c'est de tester la saisie à la
sortie de la combo :

SI Combo1 <> "" _ET_ ListeCherche(Combo1,Combo1) = -1 ALORS
Erreur("Mauvaise saisie")
RepriseSaisie(Combo1)
FIN

La deuxième est de choper l'évenement WM_KEYCHAR et de tester si le
caractère saisie peut-être inséré :

temp est une chaîne

//On ne test que les touches de "caractères affichables".
//Les caractères de contrôles (Retour arrière, Suppr, ...etc) doivent
être traité
//par Windows (C'est à dire tous les caractères qui on un code ASCII
compris entre 0 et 31)
SI _EVE.wParam >= 32 ALORS

//On construit la chaîne à rechercher avec la nouvelle saisie de
l'utilisateur
temp = Combo1[[1 A Combo1..Curseur - 1]] + Caract(_EVE.wParam) +
Combo1[[Combo1..FinCurseur A]]
temp = SansEspace(temp)

//Si le texte recherché (recherche générique) n'existe pas, on renvoi
0 à l'evenement pour
//dire à Windows que c'est nous même qui avons traité le message.
SI ListeCherche(Combo1,temp,Faux) = -1 ALORS
_EVE.Retour = 0
FIN
FIN


Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Gilles TOURREAU
Gilles TOURREAU avait énoncé :
Le 14/08/2006, borntoride a supposé :
Bonjour !

Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
combo, mais que l'utilisateur ne puisse pas entrée au clavier autre
chose que ce qu'il y a dans la liste ?

Merci !

Jonathan



2 solutions :
La première (plus simple à réaliser) c'est de tester la saisie à la sortie de
la combo :

SI Combo1 <> "" _ET_ ListeCherche(Combo1,Combo1) = -1 ALORS
Erreur("Mauvaise saisie")
RepriseSaisie(Combo1)
FIN

La deuxième est de choper l'évenement WM_KEYCHAR et de tester si le caractère
saisie peut-être inséré :

temp est une chaîne

//On ne test que les touches de "caractères affichables".
//Les caractères de contrôles (Retour arrière, Suppr, ...etc) doivent être
traité
//par Windows (C'est à dire tous les caractères qui on un code ASCII compris
entre 0 et 31)
SI _EVE.wParam >= 32 ALORS

//On construit la chaîne à rechercher avec la nouvelle saisie de
l'utilisateur
temp = Combo1[[1 A Combo1..Curseur - 1]] + Caract(_EVE.wParam) +
Combo1[[Combo1..FinCurseur A]]
temp = SansEspace(temp)

//Si le texte recherché (recherche générique) n'existe pas, on renvoi 0 à
l'evenement pour
//dire à Windows que c'est nous même qui avons traité le message.
SI ListeCherche(Combo1,temp,Faux) = -1 ALORS
_EVE.Retour = 0
FIN
FIN


Cordialement



Erratum : C'est l'évenement WM_CHAR et pas WM_KEYCHAR...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
borntoride
Milles fois merci !!

Jonathan


Gilles TOURREAU wrote:
Gilles TOURREAU avait énoncé :
> Le 14/08/2006, borntoride a supposé :
>> Bonjour !
>>
>> Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
>> combo, mais que l'utilisateur ne puisse pas entrée au clavier autre
>> chose que ce qu'il y a dans la liste ?
>>
>> Merci !
>>
>> Jonathan
>
> 2 solutions :
> La première (plus simple à réaliser) c'est de tester la saisie à la sortie de
> la combo :
>
> SI Combo1 <> "" _ET_ ListeCherche(Combo1,Combo1) = -1 ALORS
> Erreur("Mauvaise saisie")
> RepriseSaisie(Combo1)
> FIN
>
> La deuxième est de choper l'évenement WM_KEYCHAR et de tester si le caractère
> saisie peut-être inséré :
>
> temp est une chaîne
>
> //On ne test que les touches de "caractères affichables".
> //Les caractères de contrôles (Retour arrière, Suppr, ...etc) doi vent être
> traité
> //par Windows (C'est à dire tous les caractères qui on un code ASCI I compris
> entre 0 et 31)
> SI _EVE.wParam >= 32 ALORS
>
> //On construit la chaîne à rechercher avec la nouvelle saisie de
> l'utilisateur
> temp = Combo1[[1 A Combo1..Curseur - 1]] + Caract(_EVE.wParam) +
> Combo1[[Combo1..FinCurseur A]]
> temp = SansEspace(temp)
>
> //Si le texte recherché (recherche générique) n'existe pas, on r envoi 0 à
> l'evenement pour
> //dire à Windows que c'est nous même qui avons traité le message.
> SI ListeCherche(Combo1,temp,Faux) = -1 ALORS
> _EVE.Retour = 0
> FIN
> FIN
>
>
> Cordialement

Erratum : C'est l'évenement WM_CHAR et pas WM_KEYCHAR...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr


Avatar
borntoride
Rebonjour !

J'ai testé la première méthode et je ne comprend pas pourquoi mais
même avec une bonne saisie il me retourne comme quoi j'ai une mauvaise
saisie.

En essayant un peu ...

Voici mon code pour valider l'enregistrement (mon combo contient un
numéro d'employé et un nom, ce que je voulais valider c'est le nom).
Je me suis rendu compte que si je rentrais n'importe quoi (donc une
sélection non valide, le programme me retournais toujours 0 dans comme
numéro de clé donc ...

SI numEmploye <> "" _ET_ numEmploye = 0 ALORS
Erreur("Mauvaise saisie, veuillez entrer ou sélectionner exactement
un nom dans la liste.")
RepriseSaisie(numEmploye)
FIN

Je fais ce post pour tous ceux qui seront dans la même impasse que je
l'ai été.

Bonne journée !

borntoride wrote:
Milles fois merci !!

Jonathan


Gilles TOURREAU wrote:
> Gilles TOURREAU avait énoncé :
> > Le 14/08/2006, borntoride a supposé :
> >> Bonjour !
> >>
> >> Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
> >> combo, mais que l'utilisateur ne puisse pas entrée au clavier autre
> >> chose que ce qu'il y a dans la liste ?
> >>
> >> Merci !
> >>
> >> Jonathan
> >
> > 2 solutions :
> > La première (plus simple à réaliser) c'est de tester la saisie à la sortie de
> > la combo :
> >
> > SI Combo1 <> "" _ET_ ListeCherche(Combo1,Combo1) = -1 ALORS
> > Erreur("Mauvaise saisie")
> > RepriseSaisie(Combo1)
> > FIN
> >
> > La deuxième est de choper l'évenement WM_KEYCHAR et de tester si le caractère
> > saisie peut-être inséré :
> >
> > temp est une chaîne
> >
> > //On ne test que les touches de "caractères affichables".
> > //Les caractères de contrôles (Retour arrière, Suppr, ...etc) d oivent être
> > traité
> > //par Windows (C'est à dire tous les caractères qui on un code AS CII compris
> > entre 0 et 31)
> > SI _EVE.wParam >= 32 ALORS
> >
> > //On construit la chaîne à rechercher avec la nouvelle saisie de
> > l'utilisateur
> > temp = Combo1[[1 A Combo1..Curseur - 1]] + Caract(_EVE.wParam) +
> > Combo1[[Combo1..FinCurseur A]]
> > temp = SansEspace(temp)
> >
> > //Si le texte recherché (recherche générique) n'existe pas, on renvoi 0 à
> > l'evenement pour
> > //dire à Windows que c'est nous même qui avons traité le messa ge.
> > SI ListeCherche(Combo1,temp,Faux) = -1 ALORS
> > _EVE.Retour = 0
> > FIN
> > FIN
> >
> >
> > Cordialement
>
> Erratum : C'est l'évenement WM_CHAR et pas WM_KEYCHAR...
>
> Cordialement
>
> --
> Gilles TOURREAU
> Responsable informatique
>
>
> Société P.O.S
> Spécialiste en motoculture depuis + de 30 ans !
> http://www.pos.fr


Avatar
Gilles TOURREAU
borntoride a exprimé avec précision :
Rebonjour !

J'ai testé la première méthode et je ne comprend pas pourquoi mais
même avec une bonne saisie il me retourne comme quoi j'ai une mauvaise
saisie.

En essayant un peu ...

Voici mon code pour valider l'enregistrement (mon combo contient un
numéro d'employé et un nom, ce que je voulais valider c'est le nom).
Je me suis rendu compte que si je rentrais n'importe quoi (donc une
sélection non valide, le programme me retournais toujours 0 dans comme
numéro de clé donc ...

SI numEmploye <> "" _ET_ numEmploye = 0 ALORS
Erreur("Mauvaise saisie, veuillez entrer ou sélectionner exactement
un nom dans la liste.")
RepriseSaisie(numEmploye)
FIN

Je fais ce post pour tous ceux qui seront dans la même impasse que je
l'ai été.

Bonne journée !

borntoride wrote:
Milles fois merci !!

Jonathan


Gilles TOURREAU wrote:
Gilles TOURREAU avait énoncé :
Le 14/08/2006, borntoride a supposé :
Bonjour !

Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
combo, mais que l'utilisateur ne puisse pas entrée au clavier autre
chose que ce qu'il y a dans la liste ?

Merci !

Jonathan



2 solutions :
La première (plus simple à réaliser) c'est de tester la saisie à la sortie
de la combo :

SI Combo1 <> "" _ET_ ListeCherche(Combo1,Combo1) = -1 ALORS
Erreur("Mauvaise saisie")
RepriseSaisie(Combo1)
FIN

La deuxième est de choper l'évenement WM_KEYCHAR et de tester si le
caractère saisie peut-être inséré :

temp est une chaîne

//On ne test que les touches de "caractères affichables".
//Les caractères de contrôles (Retour arrière, Suppr, ...etc) doivent être
traité
//par Windows (C'est à dire tous les caractères qui on un code ASCII
compris entre 0 et 31)
SI _EVE.wParam >= 32 ALORS

//On construit la chaîne à rechercher avec la nouvelle saisie de
l'utilisateur
temp = Combo1[[1 A Combo1..Curseur - 1]] + Caract(_EVE.wParam) +
Combo1[[Combo1..FinCurseur A]]
temp = SansEspace(temp)

//Si le texte recherché (recherche générique) n'existe pas, on renvoi 0 à
l'evenement pour
//dire à Windows que c'est nous même qui avons traité le message.
SI ListeCherche(Combo1,temp,Faux) = -1 ALORS
_EVE.Retour = 0
FIN
FIN


Cordialement



Erratum : C'est l'évenement WM_CHAR et pas WM_KEYCHAR...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr







C'est normal que ca ne fonctionne pas !

Si une rubrique est associé à la propriété "rubrique mémorisé" de ta
combo (cf. onglet "contenu" de la fenetre de description d'une combo)
alors quand tu accéderas à "combo1" :

- Si l'utilisateur a saisie quelque chose qui existe dans la combo,
windev te renverra la valeur de la rubrique mémorisé associé à cette
valeur.
- 0 si ce quelque chose n'existe pas dans la combo.

Exemple :
Le fichier suivant avec une colonne "ID" et une colonne "Valeur"
1 "Titi"
2 "Toto"
4 "Lolo"

La combo1 est relié à ce fichier, avec une rubrique mémorisé sur "Id"
et la rubrique affiché "Valeur".
Ta combo contiendra alors "Titi", "Toto", "Lolo".
Si l'utilisateur saisie "Toto" et que tu demandes à Windev la valeur de
combo1, alors celui-ci te renverra 1.
Si maintenant l'utilisateur saisie "T" ou "Z" ou "Tutu" ou autre
chose..., Windev te renverra 0 (ou NULL si ta rubrique "Id" supporte le
Null).

Pour récuperer la valeur de ce que a vraiment saisie l'utilisateur, il
faut utiliser la propriété ..ValeurAffichée

SI Combo1..ValeurAffichée <> "" ...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
borntoride
Combo1..ValeurAffichée

C'est ce que je cherchais !

Merci Gilles encore une fois !

Je suis vraiment content de ton aide, j'ai hâte d'être rendu habitué
comme toi pour donner un coup de pouce aux autres comme tu le fais.

Jonathan


Gilles TOURREAU wrote:
borntoride a exprimé avec précision :
> Rebonjour !
>
> J'ai testé la première méthode et je ne comprend pas pourquoi mais
> même avec une bonne saisie il me retourne comme quoi j'ai une mauvaise
> saisie.
>
> En essayant un peu ...
>
> Voici mon code pour valider l'enregistrement (mon combo contient un
> numéro d'employé et un nom, ce que je voulais valider c'est le nom).
> Je me suis rendu compte que si je rentrais n'importe quoi (donc une
> sélection non valide, le programme me retournais toujours 0 dans comme
> numéro de clé donc ...
>
> SI numEmploye <> "" _ET_ numEmploye = 0 ALORS
> Erreur("Mauvaise saisie, veuillez entrer ou sélectionner exactement
> un nom dans la liste.")
> RepriseSaisie(numEmploye)
> FIN
>
> Je fais ce post pour tous ceux qui seront dans la même impasse que je
> l'ai été.
>
> Bonne journée !
>
> borntoride wrote:
>> Milles fois merci !!
>>
>> Jonathan
>>
>>
>> Gilles TOURREAU wrote:
>>> Gilles TOURREAU avait énoncé :
>>>> Le 14/08/2006, borntoride a supposé :
>>>>> Bonjour !
>>>>>
>>>>> Quelqu'un sait comment laisser l'option "combo avec saisie" dans un
>>>>> combo, mais que l'utilisateur ne puisse pas entrée au clavier aut re
>>>>> chose que ce qu'il y a dans la liste ?
>>>>>
>>>>> Merci !
>>>>>
>>>>> Jonathan
>>>>
>>>> 2 solutions :
>>>> La première (plus simple à réaliser) c'est de tester la saisie à la sortie
>>>> de la combo :
>>>>
>>>> SI Combo1 <> "" _ET_ ListeCherche(Combo1,Combo1) = -1 ALORS
>>>> Erreur("Mauvaise saisie")
>>>> RepriseSaisie(Combo1)
>>>> FIN
>>>>
>>>> La deuxième est de choper l'évenement WM_KEYCHAR et de tester si le
>>>> caractère saisie peut-être inséré :
>>>>
>>>> temp est une chaîne
>>>>
>>>> //On ne test que les touches de "caractères affichables".
>>>> //Les caractères de contrôles (Retour arrière, Suppr, ...etc) doivent être
>>>> traité
>>>> //par Windows (C'est à dire tous les caractères qui on un code A SCII
>>>> compris entre 0 et 31)
>>>> SI _EVE.wParam >= 32 ALORS
>>>>
>>>> //On construit la chaîne à rechercher avec la nouvelle saisie de
>>>> l'utilisateur
>>>> temp = Combo1[[1 A Combo1..Curseur - 1]] + Caract(_EVE.wParam) +
>>>> Combo1[[Combo1..FinCurseur A]]
>>>> temp = SansEspace(temp)
>>>>
>>>> //Si le texte recherché (recherche générique) n'existe pas, o n renvoi 0 à
>>>> l'evenement pour
>>>> //dire à Windows que c'est nous même qui avons traité le mess age.
>>>> SI ListeCherche(Combo1,temp,Faux) = -1 ALORS
>>>> _EVE.Retour = 0
>>>> FIN
>>>> FIN
>>>>
>>>>
>>>> Cordialement
>>>
>>> Erratum : C'est l'évenement WM_CHAR et pas WM_KEYCHAR...
>>>
>>> Cordialement
>>>
>>> --
>>> Gilles TOURREAU
>>> Responsable informatique
>>>
>>>
>>> Société P.O.S
>>> Spécialiste en motoculture depuis + de 30 ans !
>>> http://www.pos.fr

C'est normal que ca ne fonctionne pas !

Si une rubrique est associé à la propriété "rubrique mémorisé " de ta
combo (cf. onglet "contenu" de la fenetre de description d'une combo)
alors quand tu accéderas à "combo1" :

- Si l'utilisateur a saisie quelque chose qui existe dans la combo,
windev te renverra la valeur de la rubrique mémorisé associé à ce tte
valeur.
- 0 si ce quelque chose n'existe pas dans la combo.

Exemple :
Le fichier suivant avec une colonne "ID" et une colonne "Valeur"
1 "Titi"
2 "Toto"
4 "Lolo"

La combo1 est relié à ce fichier, avec une rubrique mémorisé sur "Id"
et la rubrique affiché "Valeur".
Ta combo contiendra alors "Titi", "Toto", "Lolo".
Si l'utilisateur saisie "Toto" et que tu demandes à Windev la valeur de
combo1, alors celui-ci te renverra 1.
Si maintenant l'utilisateur saisie "T" ou "Z" ou "Tutu" ou autre
chose..., Windev te renverra 0 (ou NULL si ta rubrique "Id" supporte le
Null).

Pour récuperer la valeur de ce que a vraiment saisie l'utilisateur, il
faut utiliser la propriété ..ValeurAffichée

SI Combo1..ValeurAffichée <> "" ...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr