Page 1 sur 1

[R] Récupérer contenu combo

Posté : mar. 28 janv. 2014 18:06
par aulus
Bonjour,

Je propose un combo dans lequel l'utilisateur fait son choix. S'il n'y trouve pas son bonheur, il peut entrer lui-même ses données. Par exemple, le combo propose les prénoms "Pierre, Jean, Paul, Jacques". Aucun de ces prénoms ne satisfaisant l'utilisateur, il peut entrer le prénom Louis.

Si je crée une fonction pour éditer la donnée (par exemple pour la mettre en majuscules), cette fonction va bien récupérer la donnée par un GUICtrlRead(), mais uniquement si l'utilisateur a pioché son prénom dans la liste du combo. Si c'est une donnée rentrée par lui, le GUICtrlRead() ne récupère rien.

Y a-t-il moyen de réussir la récupération dans tous les cas de figure ?

Je vous remercie.

Re: [..] Récupérer contenu combo

Posté : mar. 28 janv. 2014 21:38
par Tlem
Chez moi, le code ci-dessous fonctionne comme vous le décrivez :
► Afficher le texte

Re: [..] Récupérer contenu combo

Posté : mer. 29 janv. 2014 20:01
par aulus
Merci Tlem pour votre test. Voici le mien dans lequel vous verrez que le code surligné en rouge n'a pas d'effet (le contenu de $Combo1 n'est pas mis en majuscules) :
► Afficher le texte

Re: [..] Récupérer contenu combo

Posté : mer. 29 janv. 2014 21:57
par jguinch
Quand on y réfléchit, c'est assez logique que ça ne fonctionne pas en mode event...
En imaginant qu'à chaque fois que tapes un caractère ça génère un événement, tu aurais pour la saisie du prénom "alain" les événements "a", "l", "a", "i" et "n". Donc ça serait un peu le foutoir, non ?

Tout simplement, tu pourrais ajouter un bouton "+" ou un truc du genre qui te permettrait, lors du clic, d'ajouter le prénom saisi à la liste.

Voilà ci-dessous deux exemples :
- le premier utilise WM_COMMAND pour capter les changement dans la combo, pour afficher le bouton "+" quand tu saisis du texte manuellement
- le deuxième utilise GUISetAccelerators avec un contrôle de type dummy, ce qui permet d'appeler la fonction Majuscule quand on clique sur la touche "Enter"

► Afficher le texteAvec WM_COMMAND

► Afficher le texteAvec GUISetAccelerators
Du coup, ça complexifie le code, mais bon, le mode Event n'a pas que des avantages...

Re: [..] Récupérer contenu combo

Posté : jeu. 30 janv. 2014 09:53
par aulus
Merci jguinch pour votre travail (codes et tests).

Dans les deux cas, le contenu de $form1 n'est pas mis en majuscules, but de l'opération. Le code de Tlem tout comme le mien n'y parviennent pas non plus.

Le code suivant est ignoré dans la fonction Majuscule() :

Code : Tout sélectionner

GUICtrlSetData($Combo, StringUpper(GUICtrlRead($Combo))) ; $Combo dans le code de Tlem
GUICtrlSetData($Combo1, StringUpper(GUICtrlRead($Combo1))) ; $Combo1 dans les nôtres
 

Re: [..] Récupérer contenu combo

Posté : jeu. 30 janv. 2014 11:14
par aulus
Oh ! merveille... je crois que j'ai trouvé une solution : $CBS_UPPERCASE

Code : Tout sélectionner

Global $Combo = GUICtrlCreateCombo("", 24, 24, 145, 25, BitOR([color=#FF0000]$CBS_UPPERCASE[/color], $CBS_DROPDOWN,$CBS_AUTOHSCROLL))
Merci à tous pour votre travail.

Re: [R] Récupérer contenu combo

Posté : jeu. 30 janv. 2014 11:17
par TommyDDR
Pour reprendre le code de jguinch :
► Afficher le textecode

Re: [R] Récupérer contenu combo

Posté : jeu. 30 janv. 2014 12:39
par aulus
Merci Tommy. Votre code met bien en majuscules l'entrée dans le combo lorsque celle-ci n'est pas sélectionnée dans la liste déroulante. Toutefois, si l'entrée est sélectionnée dans la liste déroulante, elle reste en minuscules. Cette solution est intéressante puisqu'il suffirait de remplir la liste déroulante directement en majuscules pour régler tous les cas de figure.

Toutefois, je vais garder la solution que j'ai trouvée et qui consiste à utiliser le style $CBS_UPPERCASE dans le combo, d'une simplicité imbattable !

Re: [R] Récupérer contenu combo

Posté : jeu. 30 janv. 2014 14:24
par TommyDDR
Oui, en effet, le $CBS_UPPERCASE semble être là pour ça, il me semble aussi être la meilleure solution.