[Résolu]Pré sélection Combobox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Macky
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 14 mars 2022 19:34
Status : Hors ligne

[Résolu]Pré sélection Combobox

#1

Message par Macky »

Bonjour La communauté :)

Voila, je débute en code et je cherche comment pré-écrire dans une combobox. Par exemple si j'écris le début d'un prénom comme Mic ça sélectionne le prénom commençant par ces 3 lettres (ex: Mickael)...
J'ai essayé _GUICtrlComboBox_AutoComplete mais ça fonctionne pas

Et par la même occasion, intégrer le contrôle de la liste déroulante par les flèches directionnelles si possible.

Auriez-vous une solution svp ? je vous transmets mon code :

En vous remerciant par avance :D

Code : Tout sélectionner

#Region ### START Koda GUI section ### Form=

$Annuaire = GUICreate("Annuaire", 241, 171, 1650, 820)
GUISetBkColor(0XFFFF00)
GUISetState(@SW_SHOW)

GUISetFont(8, 800, 0, "Comic Sans MS")

$Label2 = GUICtrlCreateLabel("Choix du personnel :", 24, 10, 100, 17)
GUICtrlSetFont(16, 6, 800, 0, "Comic Sans MS")
GUISetState(@SW_SHOW)

$Pic1 = GUICtrlCreatePic("C:\Users\gateaum\Desktop\Annuaire Interne\R.jpg", 88, 62, 60, 60)
GUISetState(@SW_SHOW)

$Label3 = GUICtrlCreateLabel("Numéro du personnel choisi : ", 48, 130, 144, 17,$SS_CENTER)
GUICtrlSetFont(16, 6, 800, 0, "Comic Sans MS")
GUISetState(@SW_SHOW)

$Liste = GUICtrlCreateCombo("", 22, 30, 195, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL,$WS_VSCROLL))
GUISetState(@SW_SHOW)

GUICtrlSetData(-1, "tous les prénoms")
GUICtrlSetFont(16, 6, 800, 0, "Comic Sans MS")
GUISetState(@SW_SHOW)

$Liste = GUICtrlCreateCombo("", 22, 30, 195, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL,$WS_VSCROLL))

GUISetState(@SW_SHOW)
GUICtrlSendMsg($Liste, $CB_SETMINVISIBLE, 5, 0)
GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###


While 1 
	$nMsg = GUIGetMsg() 
	Switch $nMsg 
		Case $GUI_EVENT_CLOSE 
Exit
		Case $Liste

			GUICtrlSetState($Liste, $GUI_DEFBUTTON) 

GUICtrlCreateLabel(GUICtrlRead($Liste), 1, 145, 230, 25,$SS_CENTER)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetFont(16, 6, 800, 0, "Comic Sans MS")
GUICtrlSetData($Liste," ")


	EndSwitch
WEnd
Modifié en dernier par Macky le mar. 13 déc. 2022 09:28, modifié 1 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Pré sélection Combobox

#2

Message par walkson »

Bonjour,
Quand vous mettez du code, assurez vous qu'il soit fonctionnel et si il ne l'est pas, d'expliquer le problème.

Code : Tout sélectionner

#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>


#Region ### START Koda GUI section ### Form=

$Annuaire = GUICreate("Annuaire", 241, 171)
GUISetBkColor(0XFFFF00)

GUISetFont(8, 800, 0, "Comic Sans MS");Définit la police par défaut pour une fenêtre GUI.

$Label2 = GUICtrlCreateLabel("Choix du personnel :", 24, 10, 100, 17)
;GUICtrlSetFont(16, 6, 800, 0, "Comic Sans MS")

$Pic1 = GUICtrlCreatePic("C:\Users\gateaum\Desktop\Annuaire Interne\R.jpg", 88, 62, 60, 60)

$Label3 = GUICtrlCreateLabel("Numéro du personnel choisi : ", 48, 130, 144, 17,$SS_CENTER)
;GUICtrlSetFont(16, 6, 800, 0, "Comic Sans MS")

$Liste = GUICtrlCreateCombo("", 22, 30, 195, 25)
GUICtrlSetData(-1, " |michel|louis|jean|hervé|pierre")
$Label4 = GUICtrlCreateLabel("", 1, 145, 230, 25,$SS_CENTER)
GUICtrlSetColor(-1, 0xFF0000)
GUISetState(@SW_SHOW) ;Modifie l'état d'une fenêtre GUI

#EndRegion ### END Koda GUI section ###


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Liste
			GUICtrlSetData($Label4,GUICtrlRead($Liste))
			GUICtrlSetData($Liste," ")
	EndSwitch
WEnd
Quand vous écrivez 2-3 lettres dans le combo et vous déroulez la liste, un nom est sélectionné automatiquement
Evitez GUICtrlCreateLabel(GUICtrlRead($Liste), 1, 145, 230, 25,$SS_CENTER) dans la boucle while car à chaque fois que vous écrivez dans le combo, vous créez un label
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Pré sélection Combobox

#3

Message par walkson »

Je vous mets un autre code qui devrait correspondre un peu plus à vos souhaits
Il utilise Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) qui surveille en permanence le combo et réagit plus finement

Code : Tout sélectionner

#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <GuiComboBox.au3>

$Annuaire = GUICreate("Annuaire", 241, 171)
GUISetBkColor(0XFFFF00)

GUISetFont(10, 800, 0, "Comic Sans MS");Définit la police par défaut pour une fenêtre GUI.

$Label2 = GUICtrlCreateLabel("Choix du personnel :", 24, 10, 180, 17)

$Pic1 = GUICtrlCreatePic(@UserProfileDir & "\Desktop\1.bmp", 88, 62, 60, 60)

$Label3 = GUICtrlCreateLabel("Numéro du personnel choisi : ", 48, 130, 144, 17,$SS_CENTER)

Global $Liste = GUICtrlCreateCombo("", 22, 30, 195, 25, $CBS_DROPDOWN)
GUICtrlSetData(-1, " |michel|louis|laurent|jacques|jean|jule|hervé|pierre|paul")
Global $Label4 = GUICtrlCreateLabel("", 1, 145, 230, 25,$SS_CENTER)
GUICtrlSetColor(-1, 0xFF0000)
GUISetState(@SW_SHOW) ;Modifie l'état d'une fenêtre GUI
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND");Enregistre une fonction utilisateur pour un ID de message Windows connu



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Func _Edit_Changed()
	$read = GUICtrlRead($Liste);on lit le combo
	If StringLen($read) >= 3 Then ;si 3 lettres sont écrites
	$Aarray =  _GUICtrlComboBox_GetListArray ( $Liste ); on place toutes les valeurs du combo dans un tableau
	For $i = 1 To $Aarray[0]; on boucle sur les valeurs du tableau
		;ConsoleWrite(StringLeft($Aarray[$i],3) & @CRLF);pour voir, ligne à supprimer
		If StringLeft($Aarray[$i],3) = $read Then ;si les 3 lettres du combo sont retrouvées dans le tableau
			_GUICtrlComboBox_AutoComplete($Liste)
			$read = GUICtrlRead($Liste); on lit le combo autocomplete
			GUICtrlSetData($Label4,$read)
			GUICtrlSetData($Liste," ")
		;Else  ;si les 3 lettres du combo ne sont pas retrouvées dans le tableau
		;	GUICtrlSetData($Liste," ")
		EndIf
		;cela permet de voir la différence entre pierre et paul (pie et pau) et de ne pas prendre en compte des valeurs qui ne sont pas dans le combo
	Next
	EndIf
EndFunc   ;==>_Edit_Changed

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam);réagit aux changements du combo
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo
    If Not IsHWnd($Liste) Then $hWndCombo = GUICtrlGetHandle($Liste)
    $hWndFrom = $lParam
    $iIDFrom = BitAND($wParam, 0xFFFF) ; Mot de poids faible
    $iCode = BitShift($wParam, 16) ; Mot de poids fort
    Switch $hWndFrom
        Case $hWndCombo
            Switch $iCode
				Case $CBN_EDITCHANGE ; Envoyé après que l'utilisateur ait pris une mesure susceptible d'avoir modifié le texte de la zone de saisie d'une ComboBox
                    _Edit_Changed()
				Case $CBN_SELCHANGE; Envoyé lorsque l'utilisateur modifie la sélection courante dans la liste déroulante d'une ComboBox
					$read = GUICtrlRead($Liste)
					GUICtrlSetData($Label4,$read)
					GUICtrlSetData($Liste," ")
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
Le combo s'autocomplète après avoir rentré 3 lettres et ignore les valeurs qui ne sont pas dans le combo.
Les explications sont dans le code
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Macky
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 14 mars 2022 19:34
Status : Hors ligne

Re: Pré sélection Combobox

#4

Message par Macky »

walkson a écrit : lun. 12 déc. 2022 20:31 Je vous mets un autre code qui devrait correspondre un peu plus à vos souhaits
Il utilise Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) qui surveille en permanence le combo et réagit plus finement

Code : Tout sélectionner

#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <GuiComboBox.au3>

$Annuaire = GUICreate("Annuaire", 241, 171)
GUISetBkColor(0XFFFF00)

GUISetFont(10, 800, 0, "Comic Sans MS");Définit la police par défaut pour une fenêtre GUI.

$Label2 = GUICtrlCreateLabel("Choix du personnel :", 24, 10, 180, 17)

$Pic1 = GUICtrlCreatePic(@UserProfileDir & "\Desktop\1.bmp", 88, 62, 60, 60)

$Label3 = GUICtrlCreateLabel("Numéro du personnel choisi : ", 48, 130, 144, 17,$SS_CENTER)

Global $Liste = GUICtrlCreateCombo("", 22, 30, 195, 25, $CBS_DROPDOWN)
GUICtrlSetData(-1, " |michel|louis|laurent|jacques|jean|jule|hervé|pierre|paul")
Global $Label4 = GUICtrlCreateLabel("", 1, 145, 230, 25,$SS_CENTER)
GUICtrlSetColor(-1, 0xFF0000)
GUISetState(@SW_SHOW) ;Modifie l'état d'une fenêtre GUI
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND");Enregistre une fonction utilisateur pour un ID de message Windows connu



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Func _Edit_Changed()
	$read = GUICtrlRead($Liste);on lit le combo
	If StringLen($read) >= 3 Then ;si 3 lettres sont écrites
	$Aarray =  _GUICtrlComboBox_GetListArray ( $Liste ); on place toutes les valeurs du combo dans un tableau
	For $i = 1 To $Aarray[0]; on boucle sur les valeurs du tableau
		;ConsoleWrite(StringLeft($Aarray[$i],3) & @CRLF);pour voir, ligne à supprimer
		If StringLeft($Aarray[$i],3) = $read Then ;si les 3 lettres du combo sont retrouvées dans le tableau
			_GUICtrlComboBox_AutoComplete($Liste)
			$read = GUICtrlRead($Liste); on lit le combo autocomplete
			GUICtrlSetData($Label4,$read)
			GUICtrlSetData($Liste," ")
		;Else  ;si les 3 lettres du combo ne sont pas retrouvées dans le tableau
		;	GUICtrlSetData($Liste," ")
		EndIf
		;cela permet de voir la différence entre pierre et paul (pie et pau) et de ne pas prendre en compte des valeurs qui ne sont pas dans le combo
	Next
	EndIf
EndFunc   ;==>_Edit_Changed

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam);réagit aux changements du combo
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo
    If Not IsHWnd($Liste) Then $hWndCombo = GUICtrlGetHandle($Liste)
    $hWndFrom = $lParam
    $iIDFrom = BitAND($wParam, 0xFFFF) ; Mot de poids faible
    $iCode = BitShift($wParam, 16) ; Mot de poids fort
    Switch $hWndFrom
        Case $hWndCombo
            Switch $iCode
				Case $CBN_EDITCHANGE ; Envoyé après que l'utilisateur ait pris une mesure susceptible d'avoir modifié le texte de la zone de saisie d'une ComboBox
                    _Edit_Changed()
				Case $CBN_SELCHANGE; Envoyé lorsque l'utilisateur modifie la sélection courante dans la liste déroulante d'une ComboBox
					$read = GUICtrlRead($Liste)
					GUICtrlSetData($Label4,$read)
					GUICtrlSetData($Liste," ")
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
Le combo s'autocomplète après avoir rentré 3 lettres et ignore les valeurs qui ne sont pas dans le combo.
Les explications sont dans le code

Bonjour Walkson,

je te remercie beaucoup pour ton aide c'est exactement ce dont j'avais besoin et avec les explications c'est encore mieux :D
Répondre