Цитата evg64:
Я не совсем это имел в виду. Когда вводишь часть слова, под полем ввода должно появиться окно с различными вариантами продолжения »
|
Вот примерно так (есть мелкие баги, на их исправление пока не хватило времени):
Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIComboBox.au3>
;
Global $aAutoComplete_Array[8] = ["abc", "абв", 111, 222, 333]
Global $iSetAutoComplete = 0
$Form1 = GUICreate("Form1", 511, 137, 192, 124)
$nCombo = GUICtrlCreateCombo("Введите что-нибудь", 140, 40, 140, 50)
$hCombo = GUICtrlGetHandle(-1)
$nCaseSense_CheckBox = GUICtrlCreateCheckbox("Учитывать регистр букв", 140, 15, -1, 15)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If $iSetAutoComplete Then
$iSetAutoComplete = 0
GUIRegisterMsg($WM_COMMAND, "")
$iCaseSense = Number(GUICtrlRead($nCaseSense_CheckBox) = $GUI_CHECKED)
_GUICtrlCombo_SetAutoComplete($hCombo, $aAutoComplete_Array, $iCaseSense)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
EndIf
WEnd
Func _GUICtrlCombo_SetAutoComplete($hCombo, ByRef $avArray, $iCaseSense=0)
Local $sEdit_Text = _GUICtrlComboBox_GetEditText($hCombo)
If $sEdit_Text = "" Then Return SetError(1, 0, 0)
Local $iEdit_Text_Len = StringLen($sEdit_Text)
_GUICtrlComboBox_ResetContent($hCombo)
_GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
For $i = 0 To UBound($avArray)-1
If StringCompare(StringLeft($avArray[$i], $iEdit_Text_Len), $sEdit_Text, $iCaseSense) = 0 Then _
GUICtrlSetData($nCombo, $avArray[$i], "")
Next
If _GUICtrlComboBox_GetList($hCombo) <> "" Then
_GUICtrlComboBox_ShowDropDown($hCombo, True)
_GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
EndIf
EndFunc
Func WM_COMMAND($hWnd, $nMsg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Local $hCtrl = $lParam
Switch $nID
Case $nCombo
Switch $nNotifyCode
Case $CBN_EDITCHANGE, $CBN_EDITUPDATE
$iSetAutoComplete = 1
Case $CBN_SELENDOK, $CBN_CLOSEUP
Case $CBN_KILLFOCUS, $CBN_SELENDCANCEL
Local $sEdit_Text = _GUICtrlComboBox_GetEditText($hCombo)
_GUICtrlComboBox_ResetContent($hCombo)
_GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc