Ah cette méthode je vais m'en souvenir, je vous remercie !!!
En réduisant le code au maximum j'ai pu ciblé ce qui n'aillait pas !
Donc pour mon problème ou la sélection se faisait entièrement,
voici le code rogné qui démontre le bug:
► Afficher le texte
Code : Tout sélectionner
#NoTrayIcon
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GuiCombobox.au3>
#include <GuiConstants.au3>
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $DebugIt = 0
Global $msg, $ret, $old_string = "", $hwnd
#region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("XXX", 567, 446, -1, -1, -1)
Global $mm7 = GUICtrlCreateMenu("X1")
Global $mm1 = GUICtrlCreateMenu("X2")
Global $zz1 = GUICtrlCreateMenuItem("XXX1", $mm1)
Global $zz2 = GUICtrlCreateMenuItem("XXX2", $mm1)
Global $zz3 = GUICtrlCreateMenuItem("XXX3", $mm1)
Global $mm5 = GUICtrlCreateMenu("X3")
Global $xx1 = GUICtrlCreateMenu("X4")
Global $xx2 = GUICtrlCreateMenuItem("XXXX4", $xx1)
Global $xx3 = GUICtrlCreateMenuItem("XXXX5", $xx1)
Global $xx4 = GUICtrlCreateMenuItem("XXXX6", $xx1)
Global $Tab1 = GUICtrlCreateTab(13, 21, 540, 328)
Global $TabSheet1 = GUICtrlCreateTabItem("X")
Global $Group1 = GUICtrlCreateGroup("XXX", 22, 55, 520, 95)
Global $Rechercher = GUICtrlCreateCombo("", 43, 114, 364, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
$new = "Rastafari|Babylon|Zion|IandI|Jah|Roots"
GUICtrlSetData($Rechercher, $new, "")
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
#region gestion combo
Func _Combo_Changed()
;~ dim $DebugIt
If $DebugIt Then ConsoleWrite(_DebugHeader("Combo Changed:" & GUICtrlRead($Rechercher)))
_AutoComplete($Rechercher, $old_string)
EndFunc ;==>_Combo_Changed
Func _AutoComplete($Rechercher, ByRef $old_string)
If _IsPressed('08') Then;backspace pressed
$old_string = GUICtrlRead($Rechercher)
Else
If $old_string <> GUICtrlRead($Rechercher) Then
Local $ret, $wmtext, $s_data
$s_data = GUICtrlRead($Rechercher)
$ret = _GUICtrlComboBox_FindString($Rechercher, GUICtrlRead($Rechercher))
If ($ret <> $CB_ERR) Then
_GUICtrlComboBox_GetLBText($Rechercher, $ret, $wmtext)
GUICtrlSetData($Rechercher, $wmtext)
_GUICtrlComboBox_SetEditSel($Rechercher, StringLen($s_data), -1)
EndIf
$old_string = GUICtrlRead($Rechercher)
EndIf
EndIf
EndFunc ;==>_AutoComplete
Func MY_WM_COMMAND($hwnd, $msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Local $hCtrl = $lParam
Switch $nID
Case $Rechercher
Switch $nNotifyCode
Case $CBN_EDITUPDATE, $CBN_EDITCHANGE
_Combo_Changed()
Case $CBN_SELCHANGE
_Combo_Changed()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_COMMAND
Func _DebugHeader($wmtext)
Return _
"!===========================================================" & @LF & _
"+===========================================================" & @LF & _
"-->" & $wmtext & @LF & _
"+===========================================================" & @LF
EndFunc ;==>_DebugHeader
#endregion gestion combo
Il semblerait que ce soit les menus qui bloque.
Parce-que ce code-ci fonctionne:
► Afficher le texte
Code : Tout sélectionner
#NoTrayIcon
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GuiCombobox.au3>
#include <GuiConstants.au3>
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $DebugIt = 0
Global $msg, $ret, $old_string = "", $hwnd
#region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("XXX", 567, 446, -1, -1, -1)
Global $Tab1 = GUICtrlCreateTab(13, 21, 540, 328)
Global $TabSheet1 = GUICtrlCreateTabItem("X")
Global $Group1 = GUICtrlCreateGroup("XXX", 22, 55, 520, 95)
Global $Rechercher = GUICtrlCreateCombo("", 43, 114, 364, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateTabItem("")
Global $mm7 = GUICtrlCreateMenu("X1")
Global $mm1 = GUICtrlCreateMenu("X2")
Global $zz1 = GUICtrlCreateMenuItem("XXX1", $mm1)
Global $zz2 = GUICtrlCreateMenuItem("XXX2", $mm1)
Global $zz3 = GUICtrlCreateMenuItem("XXX3", $mm1)
Global $mm5 = GUICtrlCreateMenu("X3")
Global $xx1 = GUICtrlCreateMenu("X4")
Global $xx2 = GUICtrlCreateMenuItem("XXXX4", $xx1)
Global $xx3 = GUICtrlCreateMenuItem("XXXX5", $xx1)
Global $xx4 = GUICtrlCreateMenuItem("XXXX6", $xx1)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
$new = "Rastafari|Babylon|Zion|IandI|Jah|Roots"
GUICtrlSetData($Rechercher, $new, "")
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
#region gestion combo
Func _Combo_Changed()
;~ dim $DebugIt
If $DebugIt Then ConsoleWrite(_DebugHeader("Combo Changed:" & GUICtrlRead($Rechercher)))
_AutoComplete($Rechercher, $old_string)
EndFunc ;==>_Combo_Changed
Func _AutoComplete($Rechercher, ByRef $old_string)
If _IsPressed('08') Then;backspace pressed
$old_string = GUICtrlRead($Rechercher)
Else
If $old_string <> GUICtrlRead($Rechercher) Then
Local $ret, $wmtext, $s_data
$s_data = GUICtrlRead($Rechercher)
$ret = _GUICtrlComboBox_FindString($Rechercher, GUICtrlRead($Rechercher))
If ($ret <> $CB_ERR) Then
_GUICtrlComboBox_GetLBText($Rechercher, $ret, $wmtext)
GUICtrlSetData($Rechercher, $wmtext)
_GUICtrlComboBox_SetEditSel($Rechercher, StringLen($s_data), -1)
EndIf
$old_string = GUICtrlRead($Rechercher)
EndIf
EndIf
EndFunc ;==>_AutoComplete
Func MY_WM_COMMAND($hwnd, $msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Local $hCtrl = $lParam
Switch $nID
Case $Rechercher
Switch $nNotifyCode
Case $CBN_EDITUPDATE, $CBN_EDITCHANGE
_Combo_Changed()
Case $CBN_SELCHANGE
_Combo_Changed()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_COMMAND
Func _DebugHeader($wmtext)
Return _
"!===========================================================" & @LF & _
"+===========================================================" & @LF & _
"-->" & $wmtext & @LF & _
"+===========================================================" & @LF
EndFunc ;==>_DebugHeader
#endregion gestion combo
J'ai juste inversé la partie création des menu et la partie création du reste...
- Tout redevient normal aussi quand je place l'imput $Rechercher dans la GUI seule, sans le volet et sans le group. En fait si je retire l'un des deux cela remarche aussi.
Voila... je ne comprend pas vraiment d'où vient le problème, j'aimerais bien savoir, même si le problème n'est qu'à moitié résolu...
Est-ce un bug d'AutoIt, ou de Koda , un cas particulier?